我需要根据AND或OR查询动态进行 Elasticsearch 查询。
用户输入类似于SQL格式的字符串:
((("query1 query2" OR query3) OR query4) AND (query5 OR query6)) AND query7
我将其解析为数组:
[
'AND' => [
[
'AND' => [
[
'OR' => [
[
'OR' => [
'" query1 query 2"',
'query3'
]
],
'query4'
]
],
[
'OR' => [
'query5',
'query6'
]
]
]
],
'query7'
]
]
基于这个数组,我需要搜索一个字段。
就像是:
{"bool":{"must":[{"match":{"title":"research"}},{"match":{"title":"lecturer"}}]}}
但是我被嵌套条件困住了。请指教。
最佳答案
您可以将嵌套的bool
用于嵌套条件。
((("query1 query 2" OR query3) OR query4) AND (query5 OR query6)) AND query7
可以表示为:
{
"query" : {
"bool":{
"must" : [
{
"bool":{ // ((("query1 query 2" OR query3) OR query4) AND (query5 OR query6))
"must" : [
{
"bool":{ // (("query1 query 2" OR query3) OR query4)
"should" : [
{
"bool":{ // ("query1 query 2" OR query3)
"should" : [
{"match": // query1 query2},
{"match": // query3}
]
}
},
{"match": // query4}
]
}
},
{
"bool":{ // (query5 OR query6)
"should" : [
{"match": // query5},
{"match": // query6}
]
}
}
]
}
},
{match": //... query7}
]
}
}
}
关于php - Elasticsearch 中的AND OR查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682746/