[英]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
進行索引,則可以顯示必須重新索引的原因。 此文本將由您的空白標記生成器分為John
和Jepson
。 然后,您僅使用John
發出查詢時,Lucene會查找具有令牌John
任何文檔。 由於索引端處理已為John
創建了單獨的令牌,因此它將匹配名稱中帶有John
所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.