当前位置: 首页 > 面试题库 >

在elasticsearch中使用带有bool的query_string查询导致解析异常

上官修文
2023-03-14
问题内容

为什么此查询给我一个解析异常?如果我把它移开,它似乎确实起作用。但是我需要在其中带有query_string的布尔值。我该如何工作?

{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "must": [
                        {
                            "terms": {
                                "status_type": [
                                    "5"
                                ]
                            }
                        }
                    ]
                }
            },
            "filter": {
                "query_string": {
                    "fields": [
                        [
                            "name",
                            "message"
                        ]
                    ],
                    "query": "Arnold AND Schwarz"
                }
            }
        }
    },
    "sort": [
        {
            "total_metrics": {
                "order": "desc"
            }
        }
    ]
}

问题答案:

您应该使用查询过滤器,它将所有查询包装到过滤器中。否则,您将得到解析错误No filter registered for [query_string]

您需要将filter零件更改为:

"filter": {
  "query": { // <- wraps a query as a filter
    "query_string": {
      "fields": [
        [
          "name",
          "message"
        ]
      ],
      "query": "Arnold AND Schwarz"
    }
  }
}

@Edit:由于我看到人们可能会注意到,我只粘贴了整个查询的更改部分,包括filter部分(而不是整个filtered),所以这里是修改后的全部:

{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "must": [
                        {
                            "terms": {
                                "status_type": [
                                    "5"
                                ]
                            }
                        }
                    ]
                }
            },
            "filter": {
                "query": { // <- the only difference!
                    "query_string": {
                        "fields": [
                            [
                                "name",
                                "message"
                            ]
                        ],
                        "query": "Arnold AND Schwarz"
                    }
                }
            }
        }
    },
    "sort": [
        {
            "total_metrics": {
                "order": "desc"
            }
        }
    ]
}


 类似资料:
  • 考虑以下问题: 我在我们的一个系统中有这个查询,我想知道这个查询是否准确。确切地说,我的意思是,只有带有和的文档才应该返回,但决不能只返回一个单词、类似单词或根本没有匹配单词的文档。 RTFM。也许我读错了,但我没有找到这个问题的参考。 弹性5.6.3。 上述模拟的查询是否准确,这意味着它将仅使用与严格匹配的文档?

  • 问题内容: 我正在尝试使用query_string编写查询以检索嵌套对象的数据查询。 我想做的查询的一个例子是: 其中“ a”是嵌套对象,“ id”是“ a”的字段。 我知道我可以使用嵌套查询成功地执行此任务,编写如下查询: 但是,我想避免这种情况。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。我尝试使用“ fields”参数,但它似乎不适用于嵌套对象。 是否可以使用“ query_string

  • 还有 我可以使用多个过滤器在一个必须像下面的代码:

  • 这是一个关于2个查询的故事。一个返回结果,而另一个不返回结果。为什么? 返回结果的查询:

  • 问题内容: 我尝试学习Elasticsearch将其添加到我的Rails应用程序中。我想对2个字段(就像它们只是一个字段)执行一次multi_match查询,并且还要对另一个必须等​​于1的字段(状态)进行过滤。 错误是: 请求中有什么问题?如何一起执行multi_match和BOOL? 问题答案: 使用过滤查询: 与Elasticsearch 5相同的查询:

  • 问题内容: 我安装了16gb内存的Elasticsearch。我开始使用聚合,但是在尝试发出以下查询时遇到“ java.lang.OutOfMemoryError:Java堆空间”错误: query_string本身仅返回1266次匹配,因此OOM错误让我有些困惑。 我是否正确使用了聚合?如果没有,我该怎么做才能解决此问题?谢谢! 问题答案: 您正在将整个-,-和- 字段加载到内存中以进行汇总。这