2015-09-06 51 views
0

我使用Solr將服裝網站上的產品編入索引。目前,我正在嘗試使Solr基於搜索詞tshirt匹配t-shirt,但是我對我需要的過濾器略有損失。配置solr以匹配標點符號,例如't恤'搭配't恤'

這是我使用索引字段最多此刻的通用字段類型:

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
</fieldType> 

我試着刪除從索引和查詢分析器WordDelimiterFilterFactory,但它並沒有幫助。任何建議/最佳做法將非常感激。

回答

1

你會想讓WordDelimiterFilter更上一層樓,你會想要使用Whitespace Tokenizer。維基上的例子就是這樣做的。

現在的問題是,令牌先被分割成單獨的令牌,而worddelimeterfilter只能看到每個令牌。所以它看到t,然後shirt,並沒有什麼事情要做。

通過使用空白標記生成器,你會得到WDF看到「T恤」,允許它在Solr的管理員生成T,襯衫,T恤等

使用「分析」頁看到分析中的每一步以及結果是什麼。

+0

您能否通過任何機會鏈接維基文章? –

+0

工作完美,非常感謝:) –

+0

但我不想在我搜索「t恤」時搜索「襯衫」。任何解決這個問題? – Moghira