簡體   English   中英

Solr精確匹配過濾

[英]Solr Exact match filtering

我運行Solr 5.3.1,字段firstname具有firstnametype

<fieldType name="firstnametype" class="solr.TextField" omitNorms="true" positionIncrementGap="100" autoGeneratePhraseQueries="false">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords-firstname.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

現在,我只想查詢名字為“ John Jepson”,“ John J”或僅僅是“ John”的記錄。

我試圖添加一個過濾器:

fq=(firstname:"John Jepson" OR firstname:"John J" OR firstname:"John")

但是結果記錄包含名字的 “ John Francis”,“ Avram John”,“ Frederich John”等以及正確的記錄。

有沒有辦法消除這些錯誤的記錄而無需重新編制索引?

不,您必須重新索引,並且必須具有一個字段類型才能產生所需的匹配項。 如果您對完全匹配,區分大小寫以及全部匹配感興趣,則使用string字段就可以了(然后使用copyField指令將相同的內容復制到兩個字段中,因此您不必修改索引代碼) 。

如果您不希望搜索區分大小寫,請使用帶有KeywordTokenizer的TextField和LowerCaseFilterFactory作為鏈中唯一的過濾器。

如果您考慮對John Jepson進行索引,則可以顯示必須重新索引的原因。 此文本將由您的空白標記生成器分為JohnJepson 然后,您僅使用John發出查詢時,Lucene會查找具有令牌John任何文檔。 由於索引端處理已為John創建了單獨的令牌,因此它將匹配名稱中帶有John所有內容。

暫無
暫無

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

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