配置 solr 以匹配标点符号,例如'tshirt' 匹配 't-shirt'
Configuring solr to match over punctuation, e.g. 'tshirt' matches 't-shirt'
我正在使用 Solr 为服装网站上的产品编制索引。目前,我正在尝试让 Solr 根据搜索词 tshirt
匹配 t-shirt
,但我有点不知道我需要什么过滤器。
这是我目前用于索引大多数字段的通用字段类型:
<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
,但没有帮助。任何 advice/best 实践将不胜感激。
您会希望 WordDelimiterFilter
更靠近您的链,并且您会希望改用 Whitespace Tokenizer。 wiki 上的示例就是这样做的。
现在的问题是标记在早些时候被拆分成单独的标记,而 worddelimeterfilter 只能单独看到每个标记。所以它看到了 t
,然后是 shirt
,实际上没有任何事情要做。
通过使用空白分词器,您可以让 WDF 看到 "t-shirt",允许它生成 t、shirt、tshirt 等。
使用 Solr Admin 下的 "Analysis" 页面查看分析中的每个步骤以及结果。
我正在使用 Solr 为服装网站上的产品编制索引。目前,我正在尝试让 Solr 根据搜索词 tshirt
匹配 t-shirt
,但我有点不知道我需要什么过滤器。
这是我目前用于索引大多数字段的通用字段类型:
<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
,但没有帮助。任何 advice/best 实践将不胜感激。
您会希望 WordDelimiterFilter
更靠近您的链,并且您会希望改用 Whitespace Tokenizer。 wiki 上的示例就是这样做的。
现在的问题是标记在早些时候被拆分成单独的标记,而 worddelimeterfilter 只能单独看到每个标记。所以它看到了 t
,然后是 shirt
,实际上没有任何事情要做。
通过使用空白分词器,您可以让 WDF 看到 "t-shirt",允许它生成 t、shirt、tshirt 等。
使用 Solr Admin 下的 "Analysis" 页面查看分析中的每个步骤以及结果。