搜索引擎ES相关用法调研

SearchRequestBuilder查询条件选项

1、游标查询(快速,批量):
    scroll 查询可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价

图1

2、精确值查找(term查询)
用于处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text)
关键点:term和terms是包含(contains)操作,而非 等值(equals)
注意点:term查询不会对查询词进行分析,下图说明了情况


图2


图3
3、范围查询(range 查询):日期范围、字符串范围
    字符串范围可采用 字典顺序(lexicographically)或字母顺序(alphabetically)
"range": {
    "lowerversion" : {
         "lte": "3.0.1265 "
     }
    "highversion": {
        "gte" : "3.0.1265",
     }
 }
 

4、match查询
    指定多字段必须包含的情况(只想搜索包含所有词项的文档)
关键解读:对搜索串分析,只要分析词有至少一个匹配到就召回


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


图5


图6


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


图8

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


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

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


图10
     slop短语查询将查询词条的邻近度考虑到最终相关度 _score中,slop限制词项间距大小;在限制间距范围内间距越近,得分越高。(slop只能用于match_phrase中,minimum_should_match只能用于match中)
 
8、prefix 前缀查询(前缀查询存在性能问题,包括wildcard 和 regexp 查询,存在严重的资源消耗问题)
    match_phrase_prefix 查询,即时搜索(instant search) 能力:用户已经渐渐习惯在输完查询内容之前,就能为他们展现搜索结果

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


图12
9、wildcard 和 regexp (模糊和正则)匹配
    对于standard分词器,皮肤名称字段中的英文单词,比如iphone、iso、tfbodys等不会被分词,可以考虑使用下面的正则匹配对输入串进行匹配
 
图13
图14
 
10、Ngrams 在部分匹配的应用(边界 n-grams)
    设置ngram=3结果如下(ngram是在建索引mapping时指定)
ngram与prefix区别:
    ngram在索引层面解决问题,建立索引时需指定字段及ngram的范围,数据需重建索引(reindex);prefix查询之前不会分析(类似term)

图15

 

图16


图17


图18

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


图19
综合使用match和match_phrase
1、 使用match通过精度控制包含和排除文档
2、 使用match_phrase增加匹配到的文档的相关度评分
 
图20
针对***搜索需求
1、 尝试使用ngram解决字段中包含英文名称搜索的问题
2、 使用组合查询,match召回控制精度(对应输入法需求,无关项不召回),match_phrase控制相关度的评分
 
发布了5 篇原创文章 · 获赞 4 · 访问量 5003
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览