我对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?