Поиск уникальных значений с помощью Elasti c Поиск в python - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь получить уникальные значения в столбце «описание». По моим данным у меня много похожих описаний. Я хочу только уникальные.

con.search(index='data', body={
        "aggs": {
            "query": {
                "match": {"description": query_input}
            },
            "size": 30,
            "distinct_description": {
            }
        }


    })

Однако это не работает вообще. Любые предложения.

Пример:

{id: 1, state: "OP", description: "hot and humid"}
{id: 2, state: "LO", description: "dry"}
{id: 3, state: "WE", description: "hot and humid"}
{id: 4, state: "OP", description: "green and vegetative"}
{id: 5, state: "HP", description: "dry"}

Результат:

{id: 1, state: "OP", description: "hot and humid"}
{id: 2, state: "LO", description: "dry"}
{id: 4, state: "OP", description: "green and vegetative"}

1 Ответ

1 голос
/ 13 апреля 2020

Вы должны попробовать объединение терминов в подполе description.keyword:

body = {
  "query": {
    "match": {"state": query_input}
  },
   "size":1000,
  "aggs": {
    "distinct_descriptions": {
      "terms": {
        "field": "description.keyword"
      }
    }
  }
}

result = con.search(index='data', body=body)
occurrences_list = list()
occurrences_dict = {"description":None, "score":None}
for res in result["aggregations"]["distinct_descriptions"]["buckets"]:
    occurrences_dict["description"] = {res['key'] : res['doc_count'] }
    occurrences_list.append( occurrences_dict )

for res in result["hits"]["hits"]:
    for elem in occurrences_list:
        if res["_source"]["description"] == elem['description']:
            if not elem["score"]:
                elem["score"] = res["_score"]

Обратите внимание на запрос, произведенный в понедельник, теперь есть также параметр размера, в противном случаеasticsearch извлекает только 20 совпадений по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...