Bool Query

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

must 必须匹配,贡献算分
should 选择性匹配,贡献算分
must_not Filter Context,必须不能匹配
filter Filter Context,必须匹配,但是不贡献算分
  • Boosting Query
  • Disjunction Max Query - 将任何与任一查询匹配的文档作为结果返回。菜啊用字段上最匹配的评分为最终评分
    • tie_breaker:是一个介于0-1之间的浮点数,0代表使用最佳匹配;1代表所有语句同等重要
      1. 获得最佳匹配语句的评分_score
      2. 将其他匹配语句的评分与tie_breaker相乘
      3. 对以上评分求和并规范化

GET accounts/_search{
"query": {
"dis_max": {
"tie_breaker": 0.7,
"boost": 1.2,
"queries": [
{ "match": { "firstname": "Strong" } },
{ "match": { "lastname": "Strong" } } ] } }}

Fuzzy Query

  • fuzzy query是一种模糊索索,其原理是查询词与词之间出存在的相似度,在计算两个单词之间的相似度之前就需要了解Levenshtein Edit Distance(做莱文斯坦距离),它是编辑距离的一种。
  • 指两个字串之间,由一个字符串转成另一个字符串所需的最少编辑操作次数。
  • 允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符

    示例

  • 例如,单词 “ski”变为 “sky”,的编辑距离为 1,这里使用“y”替换掉了“i”

    1. POST fuzzyIndex/_search
    2. {
    3. "query": {
    4. "match": {
    5. "content": {
    6. "query": "ski",
    7. "fuzziness": 1
    8. }
    9. }
    10. }
    11. }

    AUTO设置

  • 在fuzziness参数还有一种配置方法是ATUO,它会根据词的长度计算编辑距离,形式为AUTO:[low],[high],两个参数分别表示短距离参数和长距离参数。如果没有指定,默认值是 AUTO:3,6

  • 当短距离参数和长距离参数表示为 3和6 的时候,其要传达的意思如下:
  • 单词长度为 0 到 2 之间时,fuzziness=0,表示必须要精确匹配。
  • 单词长度 3 到 5 个字母时,fuzziness=1。
  • 单词长度大于 5 个字母时,fuzziness=2。
  • 最佳实践: fuzziness 在绝大多数场合都应该设置成 AUTO。