簡體   English   中英

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

在此索引中,我有文檔,其中描述值類似於“{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~2acomodation~1回應

solr 查詢頁面截圖

我得到以下關於acomodation回應。

查詢頁面截圖2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM