美文网首页
dis_max和tie_break 查询字段最佳匹配

dis_max和tie_break 查询字段最佳匹配

作者: zz云飞扬 | 来源:发表于2019-12-13 17:26 被阅读0次

best fields策略,dis_max

best fields策略,就是说,搜索到的结果,应该是某一个field中匹配到了尽可能多的关键词,被排在前面;而不是尽可能多的field匹配到了少数的关键词,排在了前面,dis_max就是best fields 策略

1、dis_max查询只是简单的使用最佳匹配查询子句得到的_score. 将其它匹配的查询子句考虑进来也是可能的。通过指定tie_breaker参数.

dis_max 是同一字段出现所有查询关键字时得分会最高。 而指定tie_breaker 系数指定同一份id下跨字段匹配也考虑进来。
{

    "query": {

        "dis_max": {

            "queries": [

                { "match": { "title": "Quick pets" }},

                { "match": { "body":  "Quick pets" }}

            ],

            "tie_breaker": 0.3

        }

    }

}

原文链接:https://blog.csdn.net/m0_37139189/article/details/83339833

2、dis_max只取某一个query最大的分数,完全不考虑其他query的分数

3、使用tie_breaker将其他query的分数也考虑进去

tie_breaker参数的意义,在于说,将其他query的分数,乘以tie_breaker,然后综合与最高分数的那个query的分数,综合在一起进行计算

除了取最高分以外,还会考虑其他的query的分数

tie_breaker的值,在0~1之间,是个小数,就ok

GET  /_search

{

"query": {

"dis_max": {

"queries": [

{"match": {"title":"人马"}},

{"match": {"body":"改革春风"}}

            ],

"tie_breaker":0.3

        }

    }

参考https://blog.csdn.net/gwd1154978352/article/details/83856927

4、基于multi_match语法实现dis_max和tie_breaker

这边的title^2表示把title这个字段设置boost为2(权重默认是1)

minimum_should_match在之前的ElasticSearch教程——精准全文检索一文中已经说过,是用来控制搜索结果的精准度,只有匹配一定数量的关键词的数据,才能返回

GET/forum/article/_search

{

"query": {

"multi_match": {

"query":"java solution",

"type":"best_fields",

"fields":              ["title^2","content"],

"tie_breaker":0.3,

"minimum_should_match":"50%"

    }

  }

上面的举例和下面的这个结果是一样的?

GET

/forum/article/_search

{

"query": {

"dis_max": {

"queries":  [

        {

"match": {

"title": {

"query":"java beginner",

"minimum_should_match":"50%",

"boost":2

            }

          }

        },

        {

"match": {

"body": {

"query":"java beginner",

"minimum_should_match":"30%"

            }

          }

        }

      ],

"tie_breaker":0.3

    }

  }

}

5、搜索title或content中包含java或solution的帖子

下面这个就是multi-field搜索,多字段搜索, bool查询时多字段搜索,不是best_fields 搜索

GET/forum/article/_search

{

"query": {

"bool": {

"should": [

{"match": {"title":"java solution"}},

{"match": {"content":"java solution"}}

            ]

        }

    }

}

相关文章

  • dis_max和tie_break 查询字段最佳匹配

    best fields策略,dis_max best fields策略,就是说,搜索到的结果,应该是某一个fiel...

  • ElasticSearch(三):SearchAPI

    一 字段类查询 字段类查询包括全文匹配和单词匹配,全文匹配针对text类型的字段进行全文检索,会对查询语句做分词,...

  • ES多子句查询

    dis_max dis_max 支持多子句查询,子句之间是or的关系,如果两个子句都匹配到相同的文档,取最高子句分...

  • Elasticsearch 深入搜索-全文搜索

    基于词项和基于全文 匹配查询 匹配查询 match 是个 核心 查询。无论需要查询什么字段, match 查询都应...

  • elasticsearch高级查询

    elasticsearch7.8.0高级查询 数据准备 查询所有 匹配查询 字段匹配查询 分词查找 关键字精确查询...

  • mybatis plus 使用 lambda 方式 demon

    1.查询通过 字段匹配查询,并按照 时间排序 删除

  • es的常用语法(2)

    1、基于dis_max实现best fields 进行多字段搜索 1、 best fields和most fiel...

  • elasticsearch 学习笔记4

    1.查询表达式 1.1 空查询 1.2 查询语句 字段匹配 1.3合并查询语句 2.查询与过滤 Elasticse...

  • 四、常用数据查询—/2、模糊查询

    1、模糊查询like 特点: 使用like查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中还有某些内容即...

  • ES搜索结果优化

    默认匹配查询 按照ES的默认分词计算匹配度的结果 权重查询 提升某些字段的权重,但是这样会导致完全匹配的被排在后面...

网友评论

      本文标题:dis_max和tie_break 查询字段最佳匹配

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