Lucene 导致elasticsearch中返回零结果的空bool子句
我用ruby编写了一个API,帮助客户端构建elasticsearch查询dsl。 构建的查询包含一个空bool,如下所示,这会导致问题。bool是空的,这会导致返回0个结果。如果我删除bool,我会得到预期的结果如何在不删除该bool的情况下将其转化为一个匹配\u all?我需要将该bool保留在那里,直到下一版本可以删除它。如果我在bool中默认添加了一个must,并在其中添加了一个match_all,我觉得这可能会产生意想不到的结果 弹性版本:1.0.1Lucene 导致elasticsearch中返回零结果的空bool子句,lucene,elasticsearch,elastic-stack,Lucene,elasticsearch,Elastic Stack,我用ruby编写了一个API,帮助客户端构建elasticsearch查询dsl。 构建的查询包含一个空bool,如下所示,这会导致问题。bool是空的,这会导致返回0个结果。如果我删除bool,我会得到预期的结果如何在不删除该bool的情况下将其转化为一个匹配\u all?我需要将该bool保留在那里,直到下一版本可以删除它。如果我在bool中默认添加了一个must,并在其中添加了一个match_all,我觉得这可能会产生意想不到的结果 弹性版本:1.0.1 { "query": {
{
"query": {
"filtered": {
"query": {
"bool": {} <--- Causing problems
},
"filter": {
"query": {
"query_string": {
"fields": [
[
"name_field",
"message_field"
]
],
"query": "Halo AND Yaylo"
}
}
}
}
},
"sort": [
{
"interactions": {
"order": "desc"
}
}
]
}
{
“查询”:{
“过滤”:{
“查询”:{
“bool”:{}从ES版本1.3.3、2.0和1.4开始,这种行为的含义发生了变化
同时,如果您可以查看:
默认情况下,应该子句都不需要匹配,只有一个例外:如果没有必须子句,则至少有一个应该子句必须匹配
然后您可以在您的必须中使用此选项:
{
"constant_score": {
"filter": {
"query": {"match_all": {}}
},
"boost": 0
}
}
(从得分的角度)没有恶意必须
声明。这是什么版本的ES?谢谢,我已经在问题中添加了这个细节。版本是:1.0.1
。然后这就是你的答案:好的,这就是问题所在。解决方案呢?在这个阶段无法更改elastic的版本。不,这也是解决方案。更改进入了1.4、2.0和1.0版本1.3.3.和1.0.1是Elasticsearch的一个非常非常古老的版本。在这一点上,1.7.1是最新版本,它领先光年。