在Solr中模糊搜索全文的一部分
Fuzzy search a part of the whole text in Solr
我的 Solr 索引有以下字段声明:
<field name="description" type="text_ci" indexed="true" multiValued="false" required="true"/>
字段类型:
<fieldType name="text_ci" class="solr.TextField" omitNorms="true" sortMissingLast="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在这个索引中我有文档,其中描述值类似于 "Accomodation in {city}"(它们都有不同的城市)
我想做一个模糊搜索,当我输入拼写错误的 *acomodation*~2
时得到结果,但是我觉得很难,因为 "accomodation" 只是文本的一部分。
我正在考虑使用 NGramFilter 来标记输入,但我不确定这是否是正确的方法以及如何实现它。
你知道我能做什么吗?
Lucene 支持基于 Levenshtein 距离或编辑距离算法的模糊搜索。要进行模糊搜索,请使用波浪号 "~"
,单个词项末尾的符号。
我认为这里不需要 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
的以下回复。
我的 Solr 索引有以下字段声明:
<field name="description" type="text_ci" indexed="true" multiValued="false" required="true"/>
字段类型:
<fieldType name="text_ci" class="solr.TextField" omitNorms="true" sortMissingLast="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在这个索引中我有文档,其中描述值类似于 "Accomodation in {city}"(它们都有不同的城市)
我想做一个模糊搜索,当我输入拼写错误的 *acomodation*~2
时得到结果,但是我觉得很难,因为 "accomodation" 只是文本的一部分。
我正在考虑使用 NGramFilter 来标记输入,但我不确定这是否是正确的方法以及如何实现它。
你知道我能做什么吗?
Lucene 支持基于 Levenshtein 距离或编辑距离算法的模糊搜索。要进行模糊搜索,请使用波浪号 "~"
,单个词项末尾的符号。
我认为这里不需要 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
的以下回复。