當我的查詢中有特殊字符時,我得到了奇怪的結果。Solr Dismax處理程序 - 空格和特殊字符行爲
這裏是我的要求:
q=histoire-france&start=0&rows=10&sort=score+desc&defType=dismax&qf=any^1.0&mm=100%
解析的查詢:
<str name="parsedquery_toString">+((any:histoir any:franc))()</str>
因爲Solr的是做一個OR(應和)我已經得到了17000分的結果。
我沒有問題,當我使用的,而不是一個特殊字符一個空白:
q=histoire france&start=0&rows=10&sort=score+desc&defType=dismax&qf=any^1.0&mm=100%
<str name="parsedquery_toString">+(((any:histoir) (any:franc))~2)()</str>
2000結果此查詢。
這裏是我的schema.xml(相關部分):
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords_french.txt" ignoreCase="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_french.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!--<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>-->
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords_french.txt" ignoreCase="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_french.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
我甚至有PatternTokenizerFactory試圖來標記的空格&特殊字符,但沒有改變...
我目前的解決方法是在向Solr發送查詢之前,用空格替換所有特殊字符,但這並不令人滿意。
編輯:即使有charFilter(PatternReplaceCharFilterFactory)用空格來代替特殊字符,這是行不通的......
通過Solr管理分析的第一行,用詳細輸出,查詢='史-法國」:
org.apache.solr.analysis.PatternReplaceCharFilterFactory {replacement= , pattern=([,;./\\'&-]), luceneMatchVersion=LUCENE_32}
text histoire france
在 ' - ' 所取代 '',然後通過WhitespaceTokenizerFactory記號化。不過,對於'histoire-france'和'histoire france',我仍然有不同的結果。
我錯過了什麼嗎?
你重新索引數據?你需要重新索引數據才能看到任何變化 – Dorin
是的我重新編制了數據 –
你說你有你可以改變它爲 restart SOLR並分享每個查詢的結果數量。如果我猜這是真的,我會在稍後給你更詳細的解釋。 –
Dorin