我正在尝试升级我的集群Elasticsearch v7,我的查询似乎返回了很多结果,即使是不可能的请求
以前,当搜索"qdssq"时,我的搜索引擎什么也找不到。升级到v7后,类似的查询几乎会返回结果。即使我删除了查询中的所有should
子句,我也会得到很多结果。然而,评分似乎仍然有效,而且我键入了合理的查询,我确实首先得到了最相关的结果(但即使是不匹配的结果(。你能帮我解决这个问题吗?
下面是我在elasticsearch v5上启动的一个查询示例,它产生了预期的结果(现在似乎在ESv7上返回了整个DB(。为了简化,我只为FR/EN包含了一个should
{
index: "profiles",
type: nil,
body: {
query: {
function_score: {
query: {
bool: {
disable_coord: true,
filter: {
bool: {
filter: [{
term: {
indexable: true
}
}],
should: [{
match_phrase: {
: "description.french" => {
query: "qdsssq",
boost: 1,
slop: 50,
analyzer: "french_heavy"
}
}
}, {
match_phrase: {
: "description.english" => {
query: "qdsssq",
boost: 1,
slop: 50,
analyzer: "english"
}
}
}]
}
},
should: [{
match_phrase: {
: "description.french" => {
query: "qdsssq",
boost: 1,
slop: 50,
analyzer: "french_heavy"
}
}
}, {
match_phrase: {
: "description.english" => {
query: "qdsssq",
boost: 1,
slop: 50,
analyzer: "english"
}
}
}]
}
},
functions: [],
score_mode:: sum,
boost_mode:: multiply
}
}
},
size: 12,
from: 0
}
我是否错过了一些可以解释这一点的突破性变化?删除过滤器上下文(不确定这意味着什么(是否相关?如何修复我的查询,使完全不匹配的结果不包括在结果中?
我正在使用-AWS上的Elasticsearch v7.1-红宝石宝石弹性搜索-7.3.0
是的,这与删除您所指的过滤器上下文有关。
请尝试在两个bool
查询中设置minimum_should_match: 1
。
你可能也会发现这个答案很有帮助。