[英]Performing EXACT match on SOLR search
我正在實施 SOLR 搜索。 當我輸入例如 Richard Chase 時,我會得到索引中的所有 Richards 和所有 Chases,例如 Johnny Chase 等。實際上我只想返回與 Richard 和 Chase 匹配的所有名稱。
我的配置設置是
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的查詢搜索文本字段
文字:理查德·蔡斯
任何想法我做錯了什么?
您正在使用StandardTokenizerFactory ,它遵守Word Boundary 規則。
這意味着您的單詞會在空格上分開。
如果你想要一個真正的完全匹配,即
Richard Chase
要返回僅包含Richard Chase
文檔,那么您應該使用KeywordTokenizerFactory 。
但正如你提到的,你想要Richard John Chase而不是Johnny Chase ,它告訴我你想要 Richard和Chase 的匹配。
您可以搜索Richard AND Chase
或將schema.xml
的默認運算符更改為AND
而不是OR
。 請注意,此設置是全局設置。
您必須使用 PhraseQuery ( text:"Richard Chase"
) 來獲取Ricahard
和Chase
彼此靠近的文檔。 如果您還想找到Richard X. Chase
您可以使用text:"richard chase"~1
。
對於完全匹配,您可以在 solrconfig.xml 中將查詢解析器的 mm(Minimum "Should" Match) 參數設置為 100%
<str name="mm">100%</str>
這指定了查詢中必須匹配的最小子句數。 或者您可以在請求中的查詢時間覆蓋此參數 (q.mm)
另一種選擇是使用copyField到的值復制text
到一個string
類型的字段,
<field name="text_orig" type="string" />
<copyField source="text" dest="text_orig" maxChars="1024"/>
當您只需要進行完全匹配時,請在查詢中使用text_orig
字段:
text_orig:"Richard Chase"
由於字符串類型不會被分析並按原樣存儲,因此只有精確的查詢才能匹配它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.