我試圖在存儲的值(而不是查詢值)上執行完全匹配。Solr:字段值的完全匹配
我的索引數據是這樣的: 「香蕉共和國」
我需要以下查詢匹配:從香蕉共和國
- 襯衫
- 香蕉共和國項目
- 東西香蕉共和國等東西
這些應該不比賽:
- 香蕉不是共和國
- 香蕉是個好果子
- 智利共和國
我的情況其實很簡單,用SQL容易可行使用類似於:query_string LIKE '%stored_val%'
的查詢,但我無法配置貼圖程序來執行它。我相信EdgeNGramFilter
可以實現這一點,但創建長度超過30個字符的ngram會非常昂貴。
我目前的實現是:在索引分析器中,使用solr.KeywordTokenizerFactory
。在查詢分析器中,使用solr.ShingleFilterFactory
(2-4令牌)。使用分析工具時一切都很美觀。但是,使用查詢API,查詢被翻譯爲:
rawquerystring: "match_name:"banana republic"",
parsedquery_toString: "match_name:"(banana bananarepublic) republic""
不符合我保持令牌「香蕉共和國」
我的分析鏈的樣子:
<fieldType name="singletoken" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="../../common-config/mapping-ISOLatin1Accent.txt"/> <!-- map accented letters to their ascii equivilants -->
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="[^A-Za-z0-9& ]" replacement=" "/>
<filter class="solr.PatternReplaceFilterFactory" pattern="(^\s+|\s+$)" replacement=""/> <!-- join everything in a single token with no spaces -->
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="../../common-config/mapping-ISOLatin1Accent.txt"/> <!-- map accented letters to their ascii equivilants -->
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" /> <!-- using all default options from: https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory -->
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="[^A-Za-z0-9& ]" replacement=" "/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="4" outputUnigrams="true" tokenSeparator="" />
</analyzer>
</fieldType>
[如何匹配針對SOLR/Lucene的搜索字符串的子集(HTTP的可能重複。 com/questions/4882481/how-to-match-against-subssets-of-a-search-string-in-solr-lucene) – MatsLindh 2014-11-23 14:27:09
嗨@mjalajel你最終解決了你的問題嗎?我很想知道結果。謝謝 – mils 2016-05-24 23:09:31