Разработка индекса Elasticsearch - поля свободной формы и текст по сравнению со сглаженными ограничениями и проблемами запросов - PullRequest
0 голосов
/ 15 апреля 2020

Я создаю свой первый elasti c поисковый индекс. Мой документ имеет 2 поля, которые являются свободной формой для пользователя, либо объект string / number / bool / nested JSON. После исследования, насколько я могу судить, нет хорошего способа индексировать это как полные поля в ES. Даже если я смогу разделить индексы таким образом, чтобы избежать взрыва отображения, нет никакого способа гарантировать, что у одного do c не будет поля N уровней с глубоким названием «status», то есть объект, а второй do c не будет иметь то же имя поля на том же уровне, что и конкретный тип. ES, похоже, не справляется с этим хорошо. Даже если это не самое лучшее для ES, это тем не менее то, что я имею в качестве модели данных.

Для этого после исследования я пришел к выводу, что мне нужно либо:

Стрифицировать поля перед вставкой, и вставить в виде текста с сопоставлением полей:

"payload" : {
  "type" : "text",
    "fields" : {
      "keyword" : {
        "type" : "keyword",
        "ignore_above" : 256
      }
   }
}

или

используйте здесь тип сглаживания: https://www.elastic.co/guide/en/elasticsearch/reference/current/flattened.html

Тип сглаженных данных выглядит так, как будто это то, что мне нужно. Однако, как показывают документы, существуют некоторые ограничения запросов. Я обеспокоен этим, потому что я не могу получить четкое представление об ограничениях Query и других проблемах со сглаженным и текстовым полем, и по общему признанию, у меня ограниченный опыт работы с ES.

Мои вопросы:

  1. Есть ли у кого-нибудь соответствующий опыт сравнения текста со сглаженным полем схожих данных в реальном сценарии производства, и не могли бы вы рассказать о плюсах / минусах каждого из них?

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

Некоторые дополнительные info:

Мой поиск elasti c на данный момент 7.4, на случай, если это повлияет на любой ответ. Документ может выглядеть примерно так:

{
   "id": “UUID”,
   "name": “Document-Name-1”,
   "time": 1583759162707,
   "source": “Sender”,
   “data": <free form schema, tied to name, could be any concrete type or object of arbitrary depth and field config> 
}

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

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

Заранее спасибо

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