[英]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>
在此索引中,我有文檔,其中描述值類似於“{city} 的住宿”(它們都有不同的城市)
我想進行模糊搜索,例如當我輸入拼寫錯誤的*acomodation*~2
以獲取結果時,但我發現這很困難,因為“accomodation”只是文本的一部分。
我正在考慮使用 NGramFilter 來標記輸入,但我不確定這是否是正確的方法以及如何實現它。
你知道我能做什么嗎?
Lucene 支持基於 Levenshtein 距離或編輯距離算法的模糊搜索。 要進行模糊搜索,請在單個單詞 Term 的末尾使用波浪號"~"
符號。
我認為這里不需要 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
回應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.