在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~2acomodation~1

的回复

我得到了 acomodation 的以下回复。