嘗試使用WordDelimiterFilterFactory的以下字段類型。它將單詞拆分爲子字,並對子字組執行可選轉換。
默認情況下,字被劃分成子字的規則如下:
1.split上字內的分隔符(所有非字母數字字符)。 「無線網絡連接」 - > 「無線」, 「網絡連接」
的情況下過渡2.split(可以關閉 - 見splitOnCaseChange參數) 「的PowerShot」 - > 「電源」, 「射擊」
3.split上字母 - 數字轉換(可以關閉 - 見splitOnNumerics參數) 「SD500」 - > 「SD」, 「500」
<fieldtype name="subword" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
preserveOriginal="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldtype>
有效定界符的text_en_splitting定義使用WordDelimiterFilterFactory,它根據該文檔應該在非字母數字字符分割。 – Stephan
@Stephan確實,fieldType還包含WordDelimiterFilterFactory,它通常用於補充空白標記器。但是,我沒有看到WordDelimiterFilterFactory的任何選項可以分割下劃線上的單詞。這就是爲什麼我認爲你需要改變標記器。如果你只想更新過濾器,你可以嘗試添加[PatternReplaceFilterFactory](https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr。PatternReplaceFilterFactory)在WordDelimiterFilterFactory之前用空格替換下劃線,儘管這基本上是一個標記器。 – nofinator
從文檔中,它表示它應該分割爲「非字母數字」字符,所以默認情況下它應該在下劃線上工作;他們舉例說「Wi-Fi」,它被分成「Wi」和「Fi」。此外,分析儀的輸出顯示WDF將「first_second_third」分成「first」,「second」和「third」;這是我所追求的。我只是不知道爲什麼我的查詢是空的。 – Stephan