Solr 搜索 T 恤 returns 衬衫
Solr search t-shirt returns shirt
当我在我的 solr 上搜索 T 恤时,首先是 returns 衬衫。
我的字段配置如下:
<fieldType name="my_test" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" maxGramSize="20" minGramSize="2"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
你看到什么优化点了吗?
谢谢
在这里,您正在为您的字段使用 StandardTokenizerFactory
,它正在创建一个令牌作为衬衫,因此匹配。
StandardTokenizerFactory
:-
它对空格进行标记,并去除字符
StandardTokenizerFactory
的文档提到:-
Splits words at punctuation characters, removing punctuations.
However, a dot that's not followed by whitespace is considered part of
a token. Splits words at hyphens, unless there's a number in the
token. In that case, the whole token is interpreted as a product
number and is not split. Recognizes email addresses and Internet
hostnames as one token.
如果要对“t-shirt”执行搜索,则应将其标记化。
我建议您使用 KeywordTokenizerFactory
Keyword Tokenizer 不会拆分提供给它的输入。
它不对字符串做任何处理,整个字符串被视为单个标记。
这实际上并没有做任何标记化。它returns原文为一个术语
这个KeywordTokenizerFactory
用于排序或者分面需求,需要精确匹配。它有助于分面和排序。
您可以有另一个字段并对其应用 KeywordTokenizerFactory
并对其执行搜索。
我使用 solr.WhitespaceTokenizerFactory 而不是 solr.StandardTokenizerFactory
解决了这个问题
当我在我的 solr 上搜索 T 恤时,首先是 returns 衬衫。 我的字段配置如下:
<fieldType name="my_test" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" maxGramSize="20" minGramSize="2"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
你看到什么优化点了吗? 谢谢
在这里,您正在为您的字段使用 StandardTokenizerFactory
,它正在创建一个令牌作为衬衫,因此匹配。
StandardTokenizerFactory
:-
它对空格进行标记,并去除字符
StandardTokenizerFactory
的文档提到:-
Splits words at punctuation characters, removing punctuations. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token. In that case, the whole token is interpreted as a product number and is not split. Recognizes email addresses and Internet hostnames as one token.
如果要对“t-shirt”执行搜索,则应将其标记化。
我建议您使用 KeywordTokenizerFactory
Keyword Tokenizer 不会拆分提供给它的输入。 它不对字符串做任何处理,整个字符串被视为单个标记。 这实际上并没有做任何标记化。它returns原文为一个术语
这个KeywordTokenizerFactory
用于排序或者分面需求,需要精确匹配。它有助于分面和排序。
您可以有另一个字段并对其应用 KeywordTokenizerFactory
并对其执行搜索。
我使用 solr.WhitespaceTokenizerFactory 而不是 solr.StandardTokenizerFactory
解决了这个问题