栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Elasticsearch基于dis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Elasticsearch基于dis

使用dis_max关键字实现 best fields策略

假如我们要搜索title或content中包含java或solution的帖子,可以使用下面这个multi-field搜索,多字段搜索。

GET /forum/article/_search
{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "java solution" }},
                { "match": { "content":  "java solution" }}
            ]
        }
    }
}

但是往往返回结果可能并不如意,可能返回排在前面的结果是:title匹配了java 并且 content匹配了solution,但是实际我们想要的结果是title同时匹配了java和solution,或者conten同时t匹配了java 和solution,此时我们就可以用dis_max关键字来实现best fields解决这个问题。
best fields策略,就是说,搜索到的结果,应该是某一个field中匹配到了尽可能多的关键词,被排在前面;而不是尽可能多的field匹配到了少数的关键词,排在了前面,dis_max语法,直接取多个query中,分数最高的那一个query的分数即可。

GET /forum/article/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "java solution" }},
                { "match": { "content":  "java solution" }}
            ]
        }
    }
}
基于tie_breaker参数优化dis_max搜索效果

dis_max也会有新的问题,假如我们要搜索title或content中包含java beginner的帖子。

GET /forum/article/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "java beginner" }},
                { "match": { "body":  "java beginner" }}
            ]
        }
    }
}

可能会出现这样的情况:

  • 某个帖子,doc1,title中包含java,content不包含java beginner任何一个关键词;
  • 某个帖子,doc2,content中包含beginner,title中不包含任何一个关键词;
  • 某个帖子,doc3,title中包含java,content中包含beginner;

最终搜索,可能出来的结果是,doc1和doc2排在doc3的前面,而不是我们期望的doc3排在最前面,因为dis_max,只是取分数最高的那个query的分数而已,dis_max只取某一个query最大的分数,完全不考虑其他query的分数。这时候我们可以使用tie_breaker将其他query的分数也考虑进去。tie_breaker参数的意义,在于说,将其他query的分数,乘以tie_breaker,然后综合与最高分数的那个query的分数,综合在一起进行计算,除了取最高分以外,还会考虑其他的query的分数。

GET /forum/article/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "java beginner" }},
                { "match": { "body":  "java beginner" }}
            ],
            "tie_breaker": 0.3
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/697049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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