我正在用Elasticsearch做一个推荐器。我知道人们买了什么,这形成了查询。该索引包含项目,并具有一个包含共同购买的项目的字段。
我们使用的是 ES 5,以下查询查找最高分数,即与查询最共同的项目。但是 ES 6 中的此查询仅返回 score = 1.0,因此不再找到最相似的项目。
{
"query": {
"bool": {
"should": [
{
"terms": {
"bought": [
"iPad Pro",
"iPhone 8"
]
}
}
]
}
}
}
我们如何通过 ES 6 查询获得相同的结果?
Elasticsearch 6.0中被列为重大更改。基本上,terms
查询现在始终返回等于1
的分数
不幸的是,正如我已经说过的,拥有完全相同的行为是非常困难的,但是根据您的逻辑 - 我建议使用布尔查询,例如
{
"query": {
"bool" : {
"should" : [
{ "term" : { "bought" : "Ipad PRO" } },
{ "term" : { "bought" : "Iphone XS" } }
]
}
}
}
在这种情况下,您将能够模仿相同的术语查询行为,但还可以保持与您想要的确切逻辑相关的分数。如果一个人只是买了 1 件东西中的 2 分会更少'