首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写多项查询时,将constant_score添加到每个术语,而不是整个查询

重写多项查询时,将constant_score添加到每个术语,而不是整个查询
EN

Stack Overflow用户
提问于 2015-09-22 19:27:28
回答 1查看 553关注 0票数 2

我正在从geonames db寻找城市。典型的搜索字符串将是“旧金山CA”。我有一个城市和一个州域的文件。我执行一个match查询,将搜索字符串匹配到城市和州,然后使用bool组合这些匹配。

代码语言:javascript
复制
"query" : {
    "bool" : {
        "must" : {
            "match" : {
                "country" : {
                    "query" : "San Francisco CA"
                }
            }
        },
        "should" : {
            "match" : {
                "city" : {
                    "query" : "San Francisco CA"
                }
            }
        }
    }
}

我的数据库里有这两份文件:

代码语言:javascript
复制
{"city" : "San Francisco", "state" : "CA"}
{"city" : "San Marino", "state" : "San Marino"}

问题是,将“圣马力诺”州与圣马力诺州相匹配的得分要远远高于" CA“与”旧金山州“的匹配,因为有许多拥有”CA“州的城市和”圣马力诺“州的极少数城市。

我试图使用constant_score禁用以色列国防军,但这导致了另一个问题:将“旧金山CA”与“旧金山”匹配,其中两个术语匹配的分数与匹配“旧金山CA”和“圣马力诺”的只有一个术语匹配的分数相同。当多期匹配查询被重写为单独的术语时,是否可以对每个重写的查询进行constant_score,这样我就可以得到匹配“旧金山”和匹配"San“的分数分别为2分和1分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 07:44:33

ElasticSearch论坛的善意帮助下,我有了一个解决方案。

使is常量最简单的方法是创建一个自定义类来计算相似度。这是我的更新的ElasticSearch 1.7.0示例

类强制以国防军总是等于1,这解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32725263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档