布尔谓词如何在Elasticsearch查询字符串语法中工作

时间:2016-06-24 10:32:25

标签: elasticsearch

我对ES查询字符串语法有疑问。我正在搜索包含xml文档的logstash日志条目,我想搜索包含某些值的某些XML属性的文档。搜索时:

id: foobar AND attrName=SomeValue

在我的数据集中,此查询发现可以说100个文档

搜索时:

id: foobar AND attrName SomeValue

我收到的文件较少。为什么这样,根据query_string docs,默认运算符是OR。

当我逃避“像这样的字符和查询时,我得到了正确的结果: id: foobar AND attrName=\"SomeValue\"

我正在使用以下json运行查询:

{
  "sort": [
    "@timestamp"
  ],
  "query": {
    "query_string": {
      "query": "mySearchText"
    }
  },
  "fields": [
    "_id"
  ],
  "size": 100
}

有关如何搜索仅包含元素和属性但不包含文本节点的XML文档的任何提示。

编辑#1:我只是捣乱了另一件我不理解的事情。为什么这些查询不同:

a AND b OR c

不同于:

a AND (b OR c)

有关如何评估这些查询的任何提示?

编辑#2:好的,我想我已经确定了让我感到困惑的行为。 当我的查询字符串如下所示:

id: foo AND attrName=\"SomeValue\" AND field2:bar

我得到所有文件: - id = foo - field2 = bar - 包含文本attrName和文本SomeValue

当我将查询更改为(添加括号)时: id: foo AND (attrName=\"SomeValue\") AND field2:bar 我得到所有文件: - id = foo - field2 = bar - 包含文本attrName或文本SomeValue

为什么(attrName = \“SomeValue \”)被评估为attrName或SomeValue,而没有括号,它是attrName和SomeValue?

0 个答案:

没有答案