我試圖找到一種方法來改善Solr提供的拼寫建議,同時仍保留儘可能多的好建議。一個特定的搜索是造成我SA巨大的頭痛:Solr返回差和無效的拼寫建議
「黃花」
當這個Solr的搜索提供的建議「黃flowersit」
至於我可以告訴大家,這是從一個工段在這個領域用於生成看起來像「花朵」的建議。
這只是我對這個特定查詢的許多迭代問題中的一個(我確定他們有很多其他的,但我注重解決這個問題)。以前我有問題,用省略號串聯詞,如:
「花......一個」 =>「黃flowersa」
我已經厭倦了各種事情,如添加spellcheck.accuracy到查詢,但我發現這排除了有效的建議,排除了無效的建議(它在0.7處排除「acet」=>「acer」,但直到0.9時才排除「flowerse」)。我已經試過唯一的莫名其妙的真假,都沒有可觀的效果。
我在考慮嘗試使用thresholdTokenFrequency,但我有一種感覺,我會失去很多有效的建議,比如只能在索引中出現一次的專有名稱。
沿着同樣的線條:尋找「flowerse」會產生諸如「flowersse」的建議,而不是更合適的「花朵」建議。
我該怎麼做才能改善拼寫建議的結果,甚至只是列出永遠不會被建議或類似的單詞?
爲什麼索爾建議這樣的古怪的詞組合,當搜索詞是我索引中最常用的單詞之一時,它不會出現超過幾次?
文本字段類型定義:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(…|[\.]{2,})" replacement=" " />
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
建議字段定義:
<field name="suggestions" type="text" indexed="true" stored="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true" />
requestHandler:
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
請問您可以從您的schema.xml添加fieldType定義,以便從您的solrconfig.xml中導出建議的字段以及您的拼寫requestHandler條目? – 2013-02-20 20:04:02
謝謝,完成。我還添加了字段定義 – John 2013-02-20 20:24:02