#elasticsearch #elastic-stack #elasticsearch-5
#elasticsearch #эластичный стек #elasticsearch-5
Вопрос:
Это запрос для получения 10 лучших записей. Внутри этого есть ответ на имя поля, у нас есть запись «НЕОБРАБОТАННАЯ». Я хочу исключить НЕОБРАБОТАННОЕ внутри поля ответа.
Как написать запрос, чтобы получить как 10 лучших, так и исключить НЕОБРАБОТАННЫЕ
GET /logstash-sdc-mongo-abcsearch/_search?size=0
{
"aggs": {
"top_tags": {
"terms": {
"field": "question.keyword"
},
"aggs": {
"top_faq_hits": {
"top_hits": {
"_source": {
"includes": [
"answer"
]
},
"size": 1
}
}
}
}
}
}
Ответ №1:
Вы можете использовать must_not
предложение, чтобы исключить документы, которые содержатся UNHANDLED
в answer
поле. Попробуйте следующий запрос —
Сопоставление индексов:
{
"mappings": {
"properties": {
"question": {
"type": "keyword"
},
"answer": {
"type": "keyword"
}
}
}
}
Индексировать данные:
{
"question": "a",
"answer": "b"
}
{
"question": "c",
"answer": "UNHANDLED"
}
Поисковый запрос:
{
"query": {
"bool": {
"must_not": {
"term": {
"answer": "UNHANDLED"
}
}
}
},
"aggs": {
"top_tags": {
"terms": {
"field": "question"
},
"aggs": {
"top_faq_hits": {
"top_hits": {
"_source": {
"includes": [
"answer"
]
},
"size": 1
}
}
}
}
}
}
Результат поиска:
"aggregations": {
"top_tags": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "a",
"doc_count": 1,
"top_faq_hits": {
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "65563925",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"answer": "b"
}
}
]
}
}
}
]
}
}
Обновление 1:
Основываясь на приведенных ниже комментариях, попробуйте следующий запрос:
{
"query": {
"bool": {
"must_not": {
"term": {
"answer": "UNHANDLED"
}
},
"must": {
"term": {
"source": "sonax"
}
}
}
},
"aggs": {
"top_tags": {
"terms": {
"field": "question"
},
"aggs": {
"top_faq_hits": {
"top_hits": {
"_source": {
"includes": [
"answer"
]
},
"size": 1
}
}
}
}
}
}
Комментарии:
1. Большое спасибо. Это сработало. Потрясающе. С новым годом
2. @Prabhudas8703 рад, что это сработало для вас 🙂 Не могли бы вы также проголосовать и принять ответ 🙂 С Новым годом 😃
3. Привет, еще одна вещь. Мне нужно использовать еще одно условие внутри приведенного выше запроса, которое должно включать поле (Source =»Sonax»)
4. @Prabhudas8703 вы хотите, чтобы это
Sonax
поле было включено в результат агрегирования?5. Источник — это имя поля. Внутри источника мне нужны только записи Sonax.