美文网首页
高级查询:Query & Filtering 与多字符串多字段查

高级查询:Query & Filtering 与多字符串多字段查

作者: 滴流乱转的小胖子 | 来源:发表于2020-07-22 12:04 被阅读0次

在Elasticsearch中,有Query和Filter两种不同的Context

  • QueryContext:相关性算分
  • FilterContext:不需要算分(YesorNo),可以利⽤Cache,获得更好的性能

一、一个条件组合查询例子:

假设要搜索⼀本电影,包含了以下⼀些条件:

●评论中包含了Guitar,⽤户打分⾼于3分,同时上映⽇期要在1993与2000年之间

检索逻辑解析:

这个搜索其实包含了3段逻辑,针对不同的字段
●评论字段中要包含Guitar / ⽤户评分⼤于3 / 上映⽇期⽇期需要在给定的范围
●同时包含这三个逻辑,并且有⽐较好的性能?
●复合查询:boolQuery

二、bool查询

一个bool查询,是一个或者多个查询子句的组合

  • 总共包含四种子句。 其中2种会影响算分,2种不会影响算分
  • 相关性并不只是全⽂本检索的专利。也适⽤于yes|no的⼦句,匹配的⼦句越多,相关性评分越⾼。如果多条查询⼦句被合并为⼀条复合查询语句,⽐如bool查询,则每个查询⼦句计算得出的评分会被合并到总的相关性评分中。


    image.png

2.1 bool查询语法

image.png

三、如何解决结构化查询 --- “包含而不是相等”的问题

增加count字段,使用bool查询解决,从业务⻆度,按需改进Elasticsearch数据模型


image.png

四、Filter Content -- 不影响算分

image.png

五、Query Content -- 影响算分

image.png

六、bool嵌套

image.png

七、查询语句的结构,会对相关度算分产生影响

  • 同一层级下的竞争嵌套,具有相同的权重
  • 内层嵌套权重的总和等于外层同一级的
  • 通过嵌套bool查询,可以改变对算分的影响


    image.png

八、Boosting是控制相关度的一种手段

  • 索引,字段 或是查询子条件
  • 参数 boost的含义
    ●当boost> 1时,打分的相关度相对性提升
    ●当0< boost < 1时,打分的权重相对性降低
    ●当boost< 0时,贡献负分
image.png

九、Boosting Query 例子

要求苹果公司的产品信息优先


image.png

两种实现查询的方式


image.png

相关阅读

相关文章

网友评论

      本文标题:高级查询:Query & Filtering 与多字符串多字段查

      本文链接:https://www.haomeiwen.com/subject/ewyzkktx.html