带有三个or(|)的Elasticsearch简单查询字符串不返回值



我一直在使用简单的查询字符串来查询elastic内部的信息,但遇到了一个问题。

当我创建一个类似的查询时

"simple_query_string":{
"query":""this is a phrase" | KEYWORD_1 | KEYWORD_2",
"fields":[
"field_1",
"field_2",
"field_3",
],
}

它返回0个结果,同时如果查询是用括号结构的:

"simple_query_string":{
"query":"("this is a phrase" | KEYWORD_1) | KEYWORD_2",
"fields":[
"field_1",
"field_2",
"field_3",
],
}

它工作顺利。

我想知道我是不是在elastic的文档中遗漏了什么。

正如IanGabes在评论中所说:

根据elasticsearch的文件:

foo bar +baz -qux

也支持常见的布尔运算符AND、OR和NOT(也写为&&、||和!(,但要注意它们不遵守通常的优先级规则,因此当多个运算符一起使用时,应使用括号。例如,以前的查询可以重写为:

((foo AND baz) OR (bar AND baz) OR baz) AND NOT qux

或者在简单的查询lenguaje:

((foo + baz) | (bar + baz) | baz) + -qux

关于我的例子:

"this is a phrase" | KEYWORD_1 | KEYWORD_2

可以扩展到

("this is a phrase" | KEYWORD_1) | ("this is a phrase" | KEYWORD_2) | (KEYWORD_1 | KEYWORD_2)

但是,以一种更简单的方式:

("this is a phrase" | KEYWORD_1) | KEYWORD_2

添加一个包含索引数据、搜索查询和搜索结果的工作示例。要了解更多关于简单查询字符串参数的信息,请参阅有关简单查询字符串语法的官方文档

指数数据

{
"name":"multi",
"title":"Science",
"shape":"triangle"
}
{
"name":"multi grain bread",
"title":"Maths",
"shape":"square"
}
{
"name":"multi",
"title":"Science",
"shape":"square"
}

搜索查询

{
"query": {
"simple_query_string": {
"query": ""multi grain bread" | Maths | square",
"fields": [
"title",
"name",
"shape"
]
}
}
}

搜索结果

"hits": [
{
"_index": "my-index",
"_type": "_doc",
"_id": "1",
"_score": 2.6891878,
"_source": {
"name": "multi grain bread",
"title": "Maths",
"shape": "square"
}
},
{
"_index": "my-index",
"_type": "_doc",
"_id": "2",
"_score": 0.47000363,
"_source": {
"name": "multi",
"title": "Science",
"shape": "square"
}
}
]

最新更新