Как я могу преобразовать инфиксное выражение в эластичный поисковый запрос
мои операторы ! + *
, и пользователь может создать любое выражение, используя эти операторы, например:
(((A*B*(!C))*(D*E))+F)*G
иЯ хочу преобразовать его в запрос bool в упругом поиске
Редактировать
Я не знаю, почему я не сказал этого раньше, но у меня естьЯ уже написал код для преобразования инфикса в постфиксное выражение, а затем я вызываю очень грязный рекурсивный метод для создания should (+), must (*) and must_not (!)
, но то, что я ищу, - это оптимизированный способ сделать свое дело для меня.
В конце мой запрос выглядит примерно так: я думаю, что он очень и очень неприятен:
{
"from": 0,
"size": 10,
"_source": [
"*"
],
"index": "insta_userpost_new2",
"body": {
"query": {
"bool": {
"must": [
{
"match_phrase": {
"caption.text": "G"
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"caption.text": "F"
}
},
{
"bool": {
"must": [
{
"bool": {
"must": [
{
"match_phrase": {
"caption.text": "E"
}
},
{
"match_phrase": {
"caption.text": "D"
}
}
]
}
},
{
"bool": {
"must": [
{
"bool": {
"must_not": [
{
"match_phrase": {
"caption.text": "C"
}
},
{
"bool": {
"must": [
{
"match_phrase": {
"caption.text": "B"
}
},
{
"match_phrase": {
"caption.text": "A"
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
}
}