我似乎无法阻止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
textSpell:skiny
| jen\"as
因此,考虑到这一点,为什么jen
和as
会在令牌jen\"as
中单独处理?
答案 0 :(得分:0)
答案是一起指定spellcheck.q
和q
。这样主要的查询结果基于q
,但是spellcheck.q
上的拼写建议。看起来Solr正在对q
进行标记并应用一些过滤器。