栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticSearch之查询细节

elasticSearch之查询细节

bool查询评分
{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

评分方式:
它会执行 should 语句中的两个查询。
加和两个查询的评分。
乘以匹配语句的总数。
除以所有语句总数(这里为:2)

{
  "query": {
    "bool": {
      "should": [
        { "match": { "title":  "War and Peace" }},
        { "match": { "author": "Leo Tolstoy"   }},
        { "bool":  {
          "should": [
            { "match": { "translator": "Constance Garnett" }},
            { "match": { "translator": "Louise Maude"      }}
          ]
        }}
      ]
    }
  }
}

评分方式:
它会执行 should 语句中的两个查询。
加和两个查询的评分。
乘以匹配语句的总数。
除以所有语句总数(这里为:3不是4,bool作为should子查询算一条)
1、如果bool查询中只有一个should,那么shuold里的查询至少要匹配一个
2、如果bool查询中还有must或者must_not其他的查询,那么should中的查询可以不用匹配,(匹配到了_score更高)
3、minimum_should_match:最少匹配的条数

{
    "query": {
        "match": {
            "title": {      
                "query":    "BROWN DOG!",
                "operator": "and"
            }
        }
    }
}

两个必须都匹配

{
  "query": {
    "match": {
      "title": {
        "query":                "quick brown dog",
        "minimum_should_match": "2"
      }
    }
  }
}

至少匹配2个
4、boost:权重,提高相关度得分
5、dis_max查询:分离最大化查询如下例:

存储两条文档

{
    "title": "Quick brown rabbits",
    "body":  "Brown rabbits are commonly seen."
}
{
    "title": "Keeping pets healthy",
    "body":  "My quick brown fox eats rabbits on a regular basis."
}

查询1:

{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

结果1:

{
  "hits": [
     {
        "_id":      "1",
        "_score":   0.14809652,
        "_source": {
           "title": "Quick brown rabbits",
           "body":  "Brown rabbits are commonly seen."
        }
     },
     {
        "_id":      "2",
        "_score":   0.09256032,
        "_source": {
           "title": "Keeping pets healthy",
           "body":  "My quick brown fox eats rabbits on a regular basis."
        }
     }
  ]
}

会发现数据1的得分更高,原因是数据1的tittle和body都能匹配到brown,这跟bool的评分方式相关,数据2中只有body能匹配到brown fox(单个匹配度更高)。
但有时候我们就想获取单个匹配度高的怎么办?dix_max查询

{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

这要就会使单个查询匹配度更高的评分更高。
那么又有一个新问题,
如下查询

{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ]
        }
    }
}
{
    "title": "Quick brown rabbits",
    "body":  "Brown rabbits are commonly seen."
}
{
    "title": "Keeping pets healthy",
    "body":  "My quick brown fox eats rabbits on a regular basis."
}

数据1和2的单个查询匹配度相同:数据2的tittle和body都只能匹配到一条(tittle匹配到pets,body匹配到quick),数据1的body能匹配到quick,很明显以我们主观看来数据2的匹配度应该更高,怎么做?参数:tie_breaker

{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ],
            "tie_breaker": 0.3
        }
    }
}

tie_breaker 可以是 0 到 1 之间的浮点数,其中 0 代表使用 dis_max 最佳匹配语句的普通逻辑, 1 表示所有匹配语句同等重要(等同于bool评分逻辑)。
6、match_phrase查询:默认是精确查询。参数slot
比如查询quick brown fox,那么就是只能匹配到含‘quick brown fox’的,如果想让能匹配到quick fox怎么办?

{
    "query": {
        "match_phrase": {
            "title": {
            	"query": "quick fox",
            	"slop":  1
            }
        }
    }
}


想匹配到fox quick怎么办?slot值为3


7、prefix和wildcard :prefix前缀匹配,wildcard 可使用表达式( ? 匹配任意字符, * 匹配 0 或多个字符)

{
    "match_phrase_prefix" : {
        "brand" : "johnnie walker bl"
    }
}

与 match_phrase 查询一致,不同的是它将查询字符串的最后一个词作为前缀使用,换句话说,可以将之前的例子看成如下这样:
johnnie
跟着 walker
跟着以 bl 开始的词
与 match_phrase 一样,它也可以接受 slop 参数(参照 slop )让相对词序位置不那么严格:但是只有查询字符串的最后一个词才能当作前缀使用。
8、max_expansions :限制匹配到的数量(比如match_phrase、prefix等)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/663498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号