И ИЛИ запрос в упругом поиске

Мне нужно динамически создавать эластичный поисковый запрос, основанный на запросах 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

Решение

Вы можете использовать вложенные 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

Другие решения

Я создал небольшую библиотеку из этого
SqlElasticSearchQueryConverter

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector