我需要根据AND,OR查询动态制作弹性搜索查询。
用户输入类似于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"}}]}}
但是我坚持使用嵌套条件。请指教。
答案 0 :(得分:1)
您可以将嵌套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}
]
}
}
}
答案 1 :(得分:0)
我已经创建了一个小型库 SqlElasticSearchQueryConverter