Как получить уникальный результат поиска из Elasti c Поиск - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь отобразить уникальные строки описания из поиска elasti c. Я пытаюсь получить только одну из строк во многих повторяющихся строках с одинаковым описанием. Я не хочу агрегировать, поскольку мне нужна другая информация из других столбцов. Ниже приведен код, который я пытаюсь достичь, но не получается.

  res = esconnection.search(index='data', body={
        # "query": {
        #     "match": {"description": query_input}
        # },
        # "size": 30

        "query": {
            "multi_match": {
                "description": query_input
            }
        },
        "aggs": {
            "top-descriptions": {
                "terms": {
                    "field": "description"
                },
                "aggs": {
                    "top_description_hits": {
                        "top_hits": {
                            "sort": [
                                {
                                    "_score": {
                                        "order": "desc"
                                    }
                                }
                            ],
                            "size": 1
                        }
                    }
                }
            }

        }
    })
    return res["hits"]["hits"]

1 Ответ

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

Свертывание полей может использоваться для группировки документов по полю

Позволяет свернуть результаты поиска на основе значений поля. Свертывание выполняется путем выбора только самого отсортированного документа для каждого ключа свертывания. Например, приведенный ниже запрос извлекает лучший твит для каждого пользователя и сортирует его по количеству лайков.

Данные

[
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "P1lTjHEBF99yL6wF31iA",
        "_score" : 1.0,
        "_source" : {
          "description" : "brown fox"
        }
      },
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "QFlTjHEBF99yL6wF8liO",
        "_score" : 1.0,
        "_source" : {
          "description" : "brown fox"
        }
      },
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "QVlTjHEBF99yL6wF91gU",
        "_score" : 1.0,
        "_source" : {
          "description" : "brown fox"
        }
      },
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "QllUjHEBF99yL6wFFFh5",
        "_score" : 1.0,
        "_source" : {
          "description" : "brown dog"
        }
      },
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "Q1lUjHEBF99yL6wFGFhQ",
        "_score" : 1.0,
        "_source" : {
          "description" : "brown dog"
        }
      }
    ]

У меня есть три документа с описание как "коричневая лиса" и два документа с описанием как "коричневая собака"

Запрос:

{
  "query": {
    "match": {
      "description": {
        "query": "brown"
      }
    }
  },
  "collapse": {
    "field": "description.keyword" --> notice keyword
  }
}

Результат:

"hits" : [
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "P1lTjHEBF99yL6wF31iA",
        "_score" : 0.087011375,
        "_source" : {
          "description" : "brown fox"
        },
        "fields" : {
          "description.keyword" : [
            "brown fox"
          ]
        }
      },
      {
        "_index" : "index4",
        "_type" : "_doc",
        "_id" : "QllUjHEBF99yL6wFFFh5",
        "_score" : 0.087011375,
        "_source" : {
          "description" : "brown dog"
        },
        "fields" : {
          "description.keyword" : [
            "brown dog"
          ]
        }
      }
    ]

Возвращаются только 2 документа. Свертывание полей дает такие функции, как «inner_hits»: если вы хотите видеть документы в группе. Используя сортировку, вы можете решить, какой документ показывать.

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