ElasticSearch(10)-分词器的使用

1.安装smartcn

执行命令:

sh elasticsearch-plugin install analysis-smartcn

安装成功

[es@localhost bin]$ sh elasticsearch-plugin install analysis-smartcn
-> Downloading analysis-smartcn from elastic
[=================================================] 100%
-> Installed analysis-smartcn

在pluins文件夹下会有analysis-smartcn文件夹

重启es服务(如果是集群中,需要每个节点都安装,然后全部重启)

验证: 在浏览器中输入:http://192.168.15.38:9200/_analyze/

参数

{
  "analyzer": "smartcn",
  "text": "我是中国人"
}

请求方式:post

结果:

{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "word",
"position": 0
}
,
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "word",
"position": 1
}
,
{
"token": "中国",
"start_offset": 2,
"end_offset": 4,
"type": "word",
"position": 2
}
,
{
"token": "人",
"start_offset": 4,
"end_offset": 5,
"type": "word",
"position": 3
}
]
}

2.Java接口使用smartcn分词器查询

要指定分词器:analyzer("smartcn")方法

SearchRequestBuilder srb = client.prepareSearch("film2").setTypes("dongzuo");
        //组合多条件查询01
        QueryBuilder requestBuilder = QueryBuilders.matchQuery("desc", "非洲迷宫").analyzer("smartcn");
        SearchResponse response = srb.setQuery(requestBuilder).setFetchSource(new String[]{"title", "desc"}, null).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

执行结果:

smartcn会对查询的内容进行分词:"非洲"、"迷宫",然后去desc中查询符合分词的数据

{"title":"移动迷宫3:死亡解药","desc":" 《移动迷宫3》作为系列最终章,沿袭系列一贯以来的劲爆动作戏和快节奏跑酷风,主要讲述迪伦·奥布莱恩饰演的托马斯率领的好莱坞“跑男团”在经历了迷宫逃脱和末日丧尸的生死考验后,终于迎来最后的正邪较量。 "}

{"title":"战狼2","desc":"故事发生在非洲附近的大海上,主人公冷锋(吴京 饰)遭遇人生滑铁卢,被“开除军籍”,本想漂泊一生的他,正当他打算这么做的时候,一场突如其来的意外打破了他的计划,突然被卷入了一场非洲国家叛乱,本可

同时对多个字段进行查询,例如查询title和desc符合查询内容的数据:

    SearchRequestBuilder srb = client.prepareSearch("film2").setTypes("dongzuo");
        //组合多条件查询01
      //  QueryBuilder requestBuilder = QueryBuilders.matchQuery("desc", "非洲迷宫").analyzer("smartcn");

        QueryBuilder requestBuilder = QueryBuilders.multiMatchQuery("星球大战非洲迷宫","title","desc").analyzer("smartcn");
        SearchResponse response = srb.setQuery(requestBuilder).setFetchSource(new String[]{"title", "desc"}, null).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

对查询内容分词:"星球大战","非洲","迷宫"

查询结果:

{"title":"移动迷宫3:死亡解药","desc":" 《移动迷宫3》作为系列最终章,沿袭系列一贯以来的劲爆动作戏和快节奏跑酷风,主要讲述迪伦·奥布莱恩饰演的托马斯率领的好莱坞“跑男团”在经历了迷宫逃脱和末日丧尸的生死考验后,终于迎来最后的正邪较量。 "}

{"title":"战狼2","desc":"故事发生在非洲附近的大海上,主人公冷锋(吴京 饰)遭遇人生滑铁卢,被“开除军籍”,本想漂泊一生的他,正当他打算这么做的时候,一场突如其来的意外打破了他的计划,突然被卷入了一场非洲国家叛乱,本可以安全撤离,却因无法忘记曾经为军人的使命,孤身犯险冲回沦陷区,带领身陷屠杀中的同胞和难民,展开生死逃亡。随着斗争的持续,体内的狼性逐渐复苏,最终孤身闯入战乱区域,为同胞而战斗。"}

{"title":"星球大战8:最后的绝地武士","desc":"《星球大战:最后的绝地武士》承接前作《星球大战:原力觉醒》的剧情,讲述第一军团全面侵袭之下,蕾伊(黛西·雷德利 Daisy Ridley 饰)、芬恩(约翰·博耶加 John Boyega 饰)、波·

猜你喜欢

转载自my.oschina.net/u/2477500/blog/1616446