欢迎投稿

今日深度:

Elasticsearch 全文匹配查询,elasticsearch全文

Elasticsearch 全文匹配查询,elasticsearch全文


dis_max查询

相比使用bool查询,我们可以使用dis_max查询(Disjuction Max Query)。Disjuction的意思"OR"(而Conjunction的意思是"AND"),因此Disjuction Max Query的意思就是返回匹配了任何查询的文档,并且分值是产生了最佳匹配的查询所对应的分值:

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

可以发现,两份文档的分值是一模一样的。

我们期望的是同时匹配了title字段和body字段的文档能够拥有更高的排名,但是结果并非如此。需要记住:dis_max查询只是简单的使用最佳匹配查询子句得到的_score

tie_breaker

但是,将其它匹配的查询子句考虑进来也是可能的。通过指定tie_breaker参数:

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

现在文档2的分值比文档1稍高一些。

tie_breaker参数会让dis_max查询的行为更像是dis_maxbool的一种折中。它会通过下面的方式改变分值计算过程:

  1. 取得最佳匹配查询子句的_score
  2. 将其它每个匹配的子句的分值乘以tie_breaker
  3. 将以上得到的分值进行累加并规范化。

通过tie_breaker参数,所有匹配的子句都会起作用,只不过最佳匹配子句的作用更大。


/caiyun_index/spider_result/_search      post

{

  "query": {
    "multi_match": {
      "query": "test",
      "type": "best_fields",
      "fields": [
        "title",
        "文本",
        "url",
        "附件.pdf",
        "附件.others",
        "附件.picture"
      ],
      "tie_breaker": 0.3
    }
  }

}


。。。。。。。。。。。。。。。注意上面的查询要是字符类型 field中都是字符类型,int 类型就是int 类型,不能再field 包含多个类型

www.htsjk.Com true http://www.htsjk.com/Elasticsearch/31324.html NewsArticle Elasticsearch 全文匹配查询,elasticsearch全文 dis_max查询 相比使用 bool 查询,我们可以使用 dis_max 查询(Disjuction Max Query)。Disjuction的意思"OR"(而Conjunction的意思是"AND"),因此Disjuction Max Query的...
相关文章
    暂无相关文章
评论暂时关闭