![](/img/trans.png)
[英]Quering numbers containing hyphens with SOLR WordDelimiterFilterFactory isn't working?
[英]SOLR WordDelimiterFilterFactory
我使用 WordDelimiterFilterFactory 將具有數字的單詞拆分為 solr 標記。 例如單詞 Php5 被拆分為兩個標記"PHP" , "5" 。搜索時,SOLR 執行的請求是 q="php" 和 q="5"。 但是這個請求只找到了“5”的結果。 我想要的是僅查找帶有“PHP5”或“PHP 5”的文檔。
如果有人有任何想法來解決這個問題。
希望它很清楚。
謝謝。
除了索引“php5”之外,您還需要獲取 solr 以將“php 5”索引為單個標記。 例如,這樣搜索“php 5”將匹配但搜索“blah 5”不會匹配。
我能夠讓它正常工作的唯一方法是使用lucid work的Auto Phrasing 過濾器。
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="com.lucidworks.analysis.AutoPhrasingTokenFilterFactory" phrases="autophrases.txt" includeTokens="true" replaceWhitespaceWith="_" />
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
同義詞.txt
php5,php_5
protwords.txt(所以分隔符不會破壞它)
php5,php_5
您還必須更改查詢解析器以使用 lucid 解析器。
配置文件
<queryParser name="autophrasingParser" class="com.lucidworks.analysis.AutoPhrasingQParserPlugin" >
<str name="phrases">autophrases.txt</str>
<str name="replaceWhitespaceWith">_</str>
<str name="ignoreCase">false</str>
</queryParser>
<requestHandler name="/searchp" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">Keywords</str>
<str name="defType">autophrasingParser</str>
</lst>
</requestHandler>
自述.txt
php 5
過濾器可以在這里找到: https : //github.com/LucidWorks/auto-phrase-tokenfilter
這篇文章也很有幫助: http : //lucidworks.com/2014/07/02/automatic-phrase-tokenization-improving-lucene-search-precision-by-more-precise-linguistic-analysis/
此過濾器在單詞分隔符處拆分標記。
在您的情況下,您可以選擇splitOnNumerics="0"
,因此它不會溢出數字。
splitOnNumerics
:(整數,默認 1)如果為 0,則在從字母到數字的轉換時不拆分單詞:"FemBot3000" -> "Fem", "Bot3000"
確定分隔符的規則在以下鏈接中確定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.