#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>