Elasticsearch объединяет два разных типа запросов в одном запросе

Мне интересно, есть ли возможность объединить два типа запросов, в моем случае мне нужен queryString и фильтрованный запрос, каждый из которых должен работать в своем поле.
Отфильтрованный запрос получает все записи, которые находятся в $postids
$postids:multiple значение post_id
и строка запроса для поиска слов в тексте
В настоящее время мне нужно два запроса для архивации этого:
Отфильтрованный запрос:

GET /myindex1/tweecoms/_search
{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"post_id" : ['.$postids.']
}
}
}
}

query String:

GET /myindex1/tweecoms/_search{
"query": {
"query_string": {
"query": "*' . $sujet . '*",
"lenient": true
}
}
}

и я попытался объединить это

GET /myindex1/tweecoms/_search

{
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "hhhh",
"lenient": true
}
},
{
"filtered" : {
"filter" : {
"terms" : {
"post_id" : [0,157]
}
}
}
}
]
}
}
}`

но то, что я пытаюсь запустить только строку запроса

0

Решение

Я думаю, что вам нужно написать запрос внутри filtered пункт. это поможет вам понять.
Попробуй это

{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "keyword"}
},
"filter": {
"terms": {
"post_id": [0,157]
}
}
}
}
}

Проблема с вашим запросом состоит в том, что вы используете предложение must, которое выберет документы с заданной строкой запроса или документы с заданными значениями post_ids. Вы можете заменить should с must и получит ожидаемые результаты.

Вы также можете использовать minimum_should_match параметр внутри вашего запроса

надеюсь, это поможет

0

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

Других решений пока нет …

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