Создание инвертированного индекса поля numberi c в Elasticsearch - PullRequest
0 голосов
/ 16 января 2020

У меня есть набор данных около 20 миллионов записей со следующей структурой:

{"id": "123",
 "cites":[
    {"id":"234", "date":"2018-05-04"},
    {"id":"456","date":"2018-02-01"}]
}

, и я хотел бы создать индекс, где я мог бы видеть список идентификаторов, которые ссылаются на статью, что-то как

{"id":"234", "cited_by":[{"id":"123"},{"id:"188"}]}

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

Я рассмотрел использование агрегаций, но поскольку число различных идентификаторов слишком велико, в нем заканчиваются сегменты, и я не уверен, что 20 миллионов сегментов возможны и / или хорошая идея.

Как я могу создать этот индекс? Это возможно в ElasticSearch, или мне нужно написать внешний скрипт, который делает это в пакетном режиме?

Большое вам спасибо!

1 Ответ

0 голосов
/ 16 января 2020
  1. Нет проблем с использованием ElasicSearch в вашем случае.
  2. Скрипт для создания индекса
PUT /city_index
{
  "mappings": {
  "citydata": {
    "dynamic": "false",
    "properties": {
      "id": {
        "type": "keyword"

      },
      "cited_by": {
        "type": "object",
        "properties": {
          "id": {
            "type": "keyword"
          }
        }
      }
    }
  }
  }
}


...