elasticsearch,elastic-stack,Lucene,elasticsearch,Elastic Stack" /> elasticsearch,elastic-stack,Lucene,elasticsearch,Elastic Stack" />

Lucene 导致elasticsearch中返回零结果的空bool子句

Lucene 导致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": {

我用ruby编写了一个API,帮助客户端构建elasticsearch查询dsl。 构建的查询包含一个空bool,如下所示,这会导致问题。bool是空的,这会导致返回0个结果。如果我删除bool,我会得到预期的结果如何在不删除该bool的情况下将其转化为一个匹配\u all?我需要将该bool保留在那里,直到下一版本可以删除它。如果我在bool中默认添加了一个must,并在其中添加了一个match_all,我觉得这可能会产生意想不到的结果

弹性版本:1.0.1

{
    "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是最新版本,它领先光年。