#elasticsearch
#elasticsearch
Вопрос:
я был новичком в ES, теперь я могу сортировать поле в своей базе данных с помощью condition alarm! = 0 код был здесь:
{
"size":1,
"query": {
"bool": {
"must_not": {
"term": {
"header.alarmStatus": 0
}
}
}//bool
//query
}
}
и это показывает, что у него около 4000 попаданий, и это все, что я хочу
, чтобы ответ на это (size = 1) был следующим
"hits": {
"total": {
"value": 3842,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "index123",
"_type": "meter",
"_id": "63iti3QBSliyJ__JFt6C",
"_score": 0.0,
"_source": {
"header": {
"meterId": 1245,
},
"data": {
"seqNum": 72
}
}
]
}
И мой вопрос в том, как я могу выполнить запрос с условием «header.alarmStatus»: != 0
и перечислить все идентификаторы счетчиков с повторяющимися счетчиками?
Спасибо
Джефф
Комментарии:
1. не могли бы вы поделиться ожидаемым результатом поиска и, пожалуйста, объяснить, что вы подразумеваете под количеством дубликатов здесь?
Ответ №1:
Насколько я могу понять, вам нужно перечислить все meterId
(удалив количество дубликатов) для запроса с условием "header.alarmStatus": !=0
. Для этого вы можете использовать агрегацию терминов с агрегацией мощности в качестве подагрегации
Индексировать данные:
{
"header": {
"meterId": 1246,
"alarmStatus": 3
},
"data": {
"seqNum": 72
}
}
{
"header": {
"meterId": 1246,
"alarmStatus": 2
},
"data": {
"seqNum": 72
}
}
{
"header": {
"meterId": 1245,
"alarmStatus": 1
},
"data": {
"seqNum": 72
}
}
Поисковый запрос:
{
"query": {
"bool": {
"must_not": {
"term": {
"header.alarmStatus": 0
}
}
}
},
"aggs": {
"genres": {
"terms": {
"field": "header.meterId"
},
"aggs": {
"item_count": {
"cardinality": {
"field": "header.meterId"
}
}
}
}
}
}
Результат поиска:
"aggregations": {
"genres": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1246,
"doc_count": 2,
"item_count": {
"value": 1
}
},
{
"key": 1245,
"doc_count": 1,
"item_count": {
"value": 1
}
}
]
}
Комментарии:
1. @Man Man Yu повезло с этим?
2. @Man Man Yu прошло много времени. У вас была возможность просмотреть мой ответ, с нетерпением жду обратной связи от вас 🙂
3. @ManManYu Рад, что это сработало для вас 🙂 Спасибо, что приняли мой ответ, не могли бы вы также проголосовать за ответ 🙂