Как эффективно индексировать и запрашивать данные полей JSON в SOLR? - PullRequest
0 голосов
/ 06 марта 2019

Каков наилучший способ индексировать данные из Postgres, которые содержат поле с длинными вложенными данными JSONB.

ПОЛЕ PGR (поле json_db_):

{
  ...
  "field_name": "field_value",
  "columns": [
      {
          "nested_key": "nested_value_1",
          ...
      },
      {
          "nested_key": "nested_value_1",
          ...
      },
    ],
    ...
}

На данный момент я индексирую поле следующим образом:

<field name="json_db_field" type="my_text_general" indexed="true" stored="true" required="false" multiValued="false" default="{}"/>

<fieldType name="my_text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
    </analyzer>
</fieldType>

Я могу запросить это поле, включив его в поле запроса:

 qf=json_db_field

Это довольно медленный запрос, поэтому я думаю, что лучше изменить эту настройку, так как в будущем это может вызвать проблемы.

  1. Должен ли я сначала сгладить поле JSON в Postgres для новой таблицы со столбцами для каждого элемента объекта?
  2. Есть ли способ индексировать это поле в SOLR, к которому я могу эффективно обратиться?

1 Ответ

0 голосов
/ 06 марта 2019

Существует другой способ переноса данных JSON в Solr, хотя, на мой взгляд, Solr может быть более идеально заполнен XML (с использованием DIH), чем содержимым JSON.

Но если вы храните JSON, вы должныНе храните это как простой текстовый файл.Кстати: было бы полезно опубликовать определение поля my_text_general.

Должен ли я сначала выровнять поле JSON в Postgres в новую таблицу со столбцами для каждого элемента объекта?

Я бы этого не делал.миграция объектно-ориентированной структуры в плоскую структуру будет работать, но в основном вы столкнетесь с различными проблемами на этом пути.

Есть ли способ индексировать это поле в SOLR, к которому я могу эффективно обратиться?

Существуют разные способы, а также разные Вопросы о том, как добавить в JSON Solr, включая часть структуры JSON, используя что-то рядом с «вложенными документами».

Посмотрите наthis:

индексирование вложенных документов в solr

вложенных дочерних документов

// Обновлениеопределение поля, я бы не использовал столько фильтров.Но это зависит от ваших потребностей.В основном вам нравится искать один точный термин, например columns.Возможно, вы не хотели бы также найти column.Для этого вы должны использовать только минимальные фильтры, такие как lowerCase и что-то вроде solr.StandardTokenizerFactory

. Посмотрите на это, чтобы увидеть, что возможно: Solr Analyzers, Tokenizer и Token Filters

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