无法阻止 Solr 拼写检查组件对字符进行定界
Can't prevent Solr spellcheck component delimiting on characters
我似乎无法阻止 Solr 拼写检查组件按字符分隔单词。这是我拼写建议的基础领域:
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
这是我主要的通用字段类型:
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<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.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
当我运行查询时:
skiny jen\"as
我收到了经过整理的拼写建议:
"skinny jeans\\"wash"
这看起来很奇怪,因为查询已分为 skiny
、jen
和 as
,但以这种格式整理在一起。当我使用 Solr 分析器查看对我的查询所做的操作时,这些是我获得的两种字段类型的最终结果(这给出了我所期望的结果):
text_en: skini
| jen\"a
文本拼写:skiny
| jen\"as
考虑到这一点,为什么 jen
和 as
在令牌 jen\"as
中单独处理?
答案是同时指定spellcheck.q
和q
。这样,主要查询结果基于 q
,但拼写建议基于 spellcheck.q
。看起来 Solr 正在对 q
.
进行标记化和应用一些过滤器
我似乎无法阻止 Solr 拼写检查组件按字符分隔单词。这是我拼写建议的基础领域:
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
这是我主要的通用字段类型:
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<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.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
当我运行查询时:
skiny jen\"as
我收到了经过整理的拼写建议:
"skinny jeans\\"wash"
这看起来很奇怪,因为查询已分为 skiny
、jen
和 as
,但以这种格式整理在一起。当我使用 Solr 分析器查看对我的查询所做的操作时,这些是我获得的两种字段类型的最终结果(这给出了我所期望的结果):
text_en: skini
| jen\"a
文本拼写:skiny
| jen\"as
考虑到这一点,为什么 jen
和 as
在令牌 jen\"as
中单独处理?
答案是同时指定spellcheck.q
和q
。这样,主要查询结果基于 q
,但拼写建议基于 spellcheck.q
。看起来 Solr 正在对 q
.