我正在从geonames db寻找城市。典型的搜索字符串将是“旧金山CA”。我有一个城市和一个州域的文件。我执行一个match查询,将搜索字符串匹配到城市和州,然后使用bool组合这些匹配。
"query" : {
"bool" : {
"must" : {
"match" : {
"country" : {
"query" : "San Francisco CA"
}
}
},
"should" : {
"match" : {
"city" : {
"query" : "San Francisco CA"
}
}
}
}
}我的数据库里有这两份文件:
{"city" : "San Francisco", "state" : "CA"}
{"city" : "San Marino", "state" : "San Marino"}问题是,将“圣马力诺”州与圣马力诺州相匹配的得分要远远高于" CA“与”旧金山州“的匹配,因为有许多拥有”CA“州的城市和”圣马力诺“州的极少数城市。
我试图使用constant_score禁用以色列国防军,但这导致了另一个问题:将“旧金山CA”与“旧金山”匹配,其中两个术语匹配的分数与匹配“旧金山CA”和“圣马力诺”的只有一个术语匹配的分数相同。当多期匹配查询被重写为单独的术语时,是否可以对每个重写的查询进行constant_score,这样我就可以得到匹配“旧金山”和匹配"San“的分数分别为2分和1分?
发布于 2015-09-24 07:44:33
在ElasticSearch论坛的善意帮助下,我有了一个解决方案。
使is常量最简单的方法是创建一个自定义类来计算相似度。这是我的更新的ElasticSearch 1.7.0示例。
类强制以国防军总是等于1,这解决了我的问题。
https://stackoverflow.com/questions/32725263
复制相似问题