首页 > 学院 > 开发设计 > 正文

解析Elasticsearch的SearchRequestBuilder的query类型

2019-11-08 01:32:26
字体:
来源:转载
供稿:网友

分词的时机

          对于ES来讲,可以对文档的内容进行分词(前提是设置了analyzed),也可以对输入的搜索词进行分词。对输入的搜索词进行分词时需要看下使用的什么类型的query。不同的query可能会对词进行分词,也可能不分词。无论是文档分词还是搜索词分词,依赖于使用的是什么分词器。

分词的结果和分词规则(假设使用的是默认的standard)

去掉大部分标点符号,并以此分割原词为多个词,把分分割后的词转为小写(汉字的话分完的结果)放入token组中,对于not-analyzed的词,直接把原词放入token组中。如下所示:

   http://192.168.1.114:9200/_analyze?PRetty&analyzer=standard&text=销售管理

结果:

{tokens: [{token: "销",start_offset: 0,end_offset: 1,type: "<IDEOGRAPHIC>",position: 0},{token: "售",start_offset: 1,end_offset: 2,type: "<IDEOGRAPHIC>",position: 1},{token: "管",start_offset: 2,end_offset: 3,type: "<IDEOGRAPHIC>",position: 2},{token: "理",start_offset: 3,end_offset: 4,type: "<IDEOGRAPHIC>",position: 3}]}

如果进行搜索的时候会使用倒排索引的方式进行查找。

使用不同类型的query进行搜索

   1、 termQuery的机制是:直接去匹配token。如上面的分词结果如果是

       termQuery(销售)//无结果token数组不存在      termQuery(销)//有结果,token数组中存在     termQuery(售)//有结果token数组中存在

   2、matchQuery的机制是:先检查搜索的字段类型是否是analyzed,如果是,则先使用分词器分词,再去去匹配token;如果查询的字段没有被分词,则直接去匹配token。

      matchQuery(销售)1、如果查询的'销售' 字段在建索引的适合没有指定not_analyzed,那么会先进行分词在查询。会分为  销  和 售,然后依次进行查询。2、如果指定了not_analyzed那么将直接使用销售进行查询。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表