Solr Indexing Spliting Field On Delimiter - PullRequest
5 голосов
/ 31 марта 2011

Я пытаюсь настроить индекс Solr с некоторыми данными, однако я хотел бы отправить одно из моих полей в виде разделителя каналов и разделить его на конце Solr, например,

<doc>
 <add>
  <field name="cat">a|b|c<field>
 </add>
</doc>

Для многозначного поля, объявленного как

<field name="cat" type="str_split_on_pipe" indexed="true" stored="true" multiValued="true" omitNorms="true" />

И разделение по типу трубы:

<fieldType name="str_split_on_pipe" class="solr.TextField" positionIncrementGap="100" >
  <analyzer type="index">
      <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" />
      <filter class="solr.LowerCaseFilterFactory"/>
      <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>-->
      <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
     possible with WordDelimiterFilter in conjuncton with stemming. -->
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="solr.PatternTokenizerFactory" pattern="\|\s*" />
      <filter class="solr.LowerCaseFilterFactory"/>
      <!--<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>-->
      <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
     possible with WordDelimiterFilter in conjuncton with stemming. -->
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

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

Возможно ли то, что я пытаюсь сделать, и если да, то где я ошибся?

Спасибо, Амар

1 Ответ

9 голосов
/ 01 апреля 2011

Использование PatternTokenizer изменит только внутреннее представление, а не сохраненное значение. Если вы хотите, чтобы Solr рассматривал его как многозначное поле с несколькими отображаемыми значениями, то вам нужно отправить в 3 разных cat поля.

Если вы используете DataImportHandler, то вы можете использовать RegexTransformer для разделения данных.

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