天天看点

搜索引擎ES相关用法调研

SearchRequestBuilder查询条件选项

1、游标查询(快速,批量):

    scroll 查询可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价

搜索引擎ES相关用法调研

图1

2、精确值查找(term查询)

用于处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text)

关键点:term和terms是包含(contains)操作,而非 等值(equals)

注意点:term查询不会对查询词进行分析,下图说明了情况

搜索引擎ES相关用法调研

图2

搜索引擎ES相关用法调研

图3 3、范围查询(range 查询):日期范围、字符串范围

    字符串范围可采用 字典顺序(lexicographically)或字母顺序(alphabetically)

"range": {

    "lowerversion" : {

         "lte": "3.0.1265 "

     }

    "highversion": {

        "gte" : "3.0.1265",

     }

 }

4、match查询

    指定多字段必须包含的情况(只想搜索包含所有词项的文档)

关键解读:对搜索串分析,只要分析词有至少一个匹配到就召回

搜索引擎ES相关用法调研

图4 5 、match 控制查询精度:

    match  查询支持 minimum_should_match  最小匹配参数, 这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,更常用的做法是将其设置为一个百分数,因为我们无法控制用户搜索时输入的单词数量:

搜索引擎ES相关用法调研

图5

搜索引擎ES相关用法调研

图6

搜索引擎ES相关用法调研

图7  解决短语匹配中匹配不到的问题(多级联合精度控制)

搜索引擎ES相关用法调研

图8

6、dis_max查询(分离最大化查询)

搜索引擎ES相关用法调研

图9     跟bool查询的优势对比,bool查询只是简单的bool分项分数相加;dis_max提升了多字段最佳匹配的得分,削弱了单一字段特别高对整体得分的影响

7、短语匹配(match_phrase 查询 ):

       短语匹配或许是过于严格了,我们能够通过使用slop参数将灵活度引入短语匹配中,slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配。

搜索引擎ES相关用法调研

图10      slop短语查询将查询词条的邻近度考虑到最终相关度 _score中,slop限制词项间距大小;在限制间距范围内间距越近,得分越高。(slop只能用于match_phrase中,minimum_should_match只能用于match中)

8、prefix 前缀查询(前缀查询存在性能问题,包括wildcard 和 regexp 查询,存在严重的资源消耗问题)

    match_phrase_prefix 查询,即时搜索(instant search) 能力:用户已经渐渐习惯在输完查询内容之前,就能为他们展现搜索结果

搜索引擎ES相关用法调研

图11     prefix查询是一个词级别的底层的查询,它不会在搜索之前分析查询字符串,它假定传入前缀就正是要查找的前缀。因此有下面的结果

搜索引擎ES相关用法调研

图12 9、

wildcard

 和 

regexp

 (模糊和正则)匹配

    对于standard分词器,皮肤名称字段中的英文单词,比如iphone、iso、tfbodys等不会被分词,可以考虑使用下面的正则匹配对输入串进行匹配

搜索引擎ES相关用法调研

图13

搜索引擎ES相关用法调研

图14  

10、Ngrams 在部分匹配的应用(边界 n-grams)

    设置ngram=3结果如下(ngram是在建索引mapping时指定)

ngram与prefix区别:

    ngram在索引层面解决问题,建立索引时需指定字段及ngram的范围,数据需重建索引(reindex);prefix查询之前不会分析(类似term)

搜索引擎ES相关用法调研

图15

搜索引擎ES相关用法调研

图16

搜索引擎ES相关用法调研

图17

搜索引擎ES相关用法调研

图18

11、组合查询中的权重评分控制

搜索引擎ES相关用法调研

图19 综合使用match和match_phrase:

1、 使用match通过精度控制包含和排除文档

2、 使用match_phrase增加匹配到的文档的相关度评分

搜索引擎ES相关用法调研

图20 针对***搜索需求

1、 尝试使用ngram解决字段中包含英文名称搜索的问题

2、 使用组合查询,match召回控制精度(对应输入法需求,无关项不召回),match_phrase控制相关度的评分

继续阅读