簡體   English   中英

SOLR WordDelimiterFilterFactory

[英]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 workAuto 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"

確定分隔符的規則在以下鏈接中確定

https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM