Как выполнить частичный поиск с помощью Solr?

#java #solr #solrcloud

#java #solr #solrcloud

Вопрос:

У меня есть данные, проиндексированные в Solr, например «S-1234567890». Если я попытаюсь выполнить поиск с полным значением, это даст результат. Но при поиске с помощью 67890 * это не работает.

Не могли бы вы помочь, как выполнить поиск данных при частичном текстовом поиске?

Комментарии:

1. Какой элемент поля вы используете для этого значения? (например, string, text_general, custom?)

Ответ №1:

Попробуйте использовать приведенный ниже тип поля для вашего поля.

Определение типа поля

 <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="name" type="text_ngrm" indexed="true" stored="true"/>
  

Вы также можете попробовать использовать приведенное ниже

 <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.KeywordTokenizerFactory"/>
           <filter class="solr.LowerCaseFilterFactory"/>
         </analyzer>
      </fieldType>