Lucene поддерживает нечеткие поиски на основе расстояния Левенштейна или алгоритма редактирования расстояния. Для нечеткого поиска используйте символ тильды, "~"
, в конце термина «Отдельное слово».
Я не вижу здесь необходимости в NGramFilter.
~
оператор используется для запуска нечетких поисков. Вы должны добавить оператор ~
после каждого термина и также можете указать расстояние редактирования, которое является необязательным после этого, как показано ниже.
{FIELD_NAME:TERM_1~{Edit_Distance}
Ваш запрос будет выглядеть ниже.
http://localhost:8983/solr/FuzzySearchExample/select?indent=on&q=desc:Samsu~&wt=json&fl=id,desc
У меня был тип поля, как показано ниже.
<fieldType name="text_ci" class="solr.TextField" omitNorms="true" sortMissingLast="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Я получаю ответ ниже для acomodation~2
или acomodation~1
И я получаю ответ ниже для acomodation
.