#elasticsearch #elastic-stack #elasticsearch-5 #elasticsearch-dsl
#elasticsearch #elastic-stack #elasticsearch-5 #elasticsearch-dsl
Вопрос:
Мой запрос точного соответствия по статусу полей, location_id выглядит следующим образом:
{'query': {'constant_score': {'filter': {'bool': {
'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
{'bool': {'should': [{'terms': {'location_id': [1652]}}]}}],
'must_not': []}}}},
'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}
Предположим, что приведенный выше запрос возвращает 50 записей, теперь в этих 50 записях я хочу выполнить поиск по слову в одном из столбцов. Например, столбец — описание, а слово — «тест». Как я могу объединить приведенный выше запрос с этим запросом поискового слова.
Столбец поиска может быть одним из обязательных запросов (статус / местоположение)
Короче говоря, я хочу, чтобы все записи имели статус Open / Not complete и location_id == 1652, а поле описания содержало слово «test» в любом месте текста
Я пробовал simple_query_String и query_string, но получал ошибку. Не уверен, где я могу поместить его во вложенный запрос выше.
Я попробовал ниже запрос с совпадением, но он не записывает никаких записей:
{'query': {'constant_score': {'filter': {'bool': {
'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
{'bool': {'should': [{'terms': {'location_id': [1652]}}]}},
{'bool': {'should': [{'match': {'description': 'test'}}]}}],
'must_not': []}}}},
'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}
Рабочий запрос с использованием query_string
{'query': {'constant_score': {'filter': {'bool': {
'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
{'bool': {'should': [{'terms': {'location_id': [1652]}}]}},
{'query_string': {"default_field": "description",
"query": "*test*"}}],
'must_not': []}}}},
'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}
Комментарии:
1. какую версию elasticsearch вы используете?
2. у вас была возможность просмотреть мой ответ, с нетерпением жду обратной связи от вас 🙂
3. @BhavyaGupta Да, попробовал ваш ответ и добавил обновленный запрос в вопросе. Но все равно он не работал с запросом соответствия . Пробовал использовать подстановочный знак и query_string , сейчас он работает, но запрос чувствителен к регистру. Хотел сделать его нечувствительным к регистру
4. Версия @BhavyaGupta — 5.6.16
5. было бы здорово, если бы вы могли добавить некоторые образцы данных, по которым вы выполняете свой поисковый запрос
Ответ №1:
Вы можете использовать логический запрос, где
Запрос сопоставляет документы, соответствующие логическим комбинациям других запросов.
Добавление рабочего примера с индексными данными, поисковым запросом и результатом поиска. Приведенный ниже поисковый запрос соответствует вашим следующим требованиям:
Короче говоря, я хочу, чтобы все записи имели статус Open / Not complete и location_id == 1652, а поле описания содержало слово «test» в любом месте текста
Индексировать данные:
{
"description":"test",
"status":["open","not connected"],
"location_id":[1652]
}
Поисковый запрос:
{
"query": {
"bool": {
"must": [
{
"match": {
"description": "test"
}
},
{
"terms": {
"status": [
"open",
"not complete"
]
}
},
{
"terms": {
"location_id": [
"1652"
]
}
}
]
}
}
}
Результат поиска:
"hits": [
{
"_index": "stof_63936644",
"_type": "_doc",
"_id": "1",
"_score": 2.287682,
"_source": {
"description": "test",
"status": [
"open",
"not connected"
],
"location_id": [
1652
]
}
}
]
Комментарии:
1. Спасибо за ответ. Попробовал запрос соответствия, но он не вернул никаких результатов, даже если есть совпадающие записи. Я добавил соответствующий запрос, который я пробовал
2. @GauravVichare как вы упомянули в вопросе, вы хотите, чтобы все записи имели статус Open / Not complete и location_id == 1652, а поле описания содержало слово «test»
3. @GauravVichare можете ли вы предоставить какие-либо образцы индексных данных, к которым вы пытаетесь запросить, потому что данные, которые я тестировал с помощью данного поискового запроса, работают нормально, и я могу получить результат