Может выполнять частичный поиск без имени поля в solr - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь выполнить частичный поиск по полю в solr. my_id: ABC_00123

Я хочу найти 123 и увидеть этот элемент. Я не могу заставить его работать без использования поля my_id в запросе.

В моей схеме. xml Я поставил:

  <fieldType name="text_ngrm" class="solr.TextField" positionIncrementGap="100">

      <analyzer type="index">
          <tokenizer class="solr.WhitespaceTokenizerFactory" />
          <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="50" />

          <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
      <analyzer type="query">
          <tokenizer class="solr.WhitespaceTokenizerFactory" />
          <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
</fieldType>

Затем (я не уверен, что это необходимо):

<field name="_text_ngrm_" type="text_ngrm" indexed="true" stored="false"/>

У меня также есть:

<field name="my_id" type="text_ngrm" indexed="true" stored="true"/>

Наконец:

<copyField source="my_id" dest="_text_ngrm_"/>

Для запроса это работает: my_id: 223

Но 223 сам по себе этого не делает. У меня такое чувство, что это связано с определением copyField.

Единственный способ заставить его работать - это изменить:

<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">_text_ngrm_</str>   
    </lst>
</initParams>

Но это нарушает все мои другие поиски по умолчанию . Есть ли способ добавить, например:

<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">_text_</str>   
      <str name="df">_text_ngrm_</str>   
    </lst>
</initParams>

Спасибо за любую помощь

1 Ответ

1 голос
/ 08 мая 2020

Вы можете указать поле поиска по умолчанию в URL-адресе при запросе, предоставив df самостоятельно - так что для вашего единственного запроса вы можете указать &df=_text_ngrm_ - поскольку это поле, которое вы хотите искать.

Вы также можете использовать обработчик edismax для поиска в обоих случаях - используйте qf=_text_ _text_ngrm_ - в этом случае вы также можете применять разные веса к полям, например, чтобы дать более точным совпадениям более высокий импульс - qf=_text_^5 _text_ngrm_ даст в пять раз больше вес попаданий в поле _text_ по сравнению с полем _text_ngrm_.

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