我已经设置了一个Solr 4多核实例,它的工作方式就像一个魅力但是我遇到了关于停用词过滤器的问题,我还没检查索引过滤器是否是正确地忽略了stopwords_XX.txt文件中的单词,但我确信它不会在查询分析器上工作。
好的,我在schema.xml中创建了一个字段类型,其中查询分析器如下:
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_es.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_es.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords_es.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
我的stopwords_es.txt文件是这样的(但更长):
a
acá
ahí
ajena
ajeno
ajenas
ajenos
al
algo
algún
alguna
alguno
algunos
algunas
allá
(...)
de
(...)
y
(...)
所以,我正在构建我的关键字查询,将短语中的所有关键字拆分,然后为每个单词创建一个OR,最后提升整个短语。如果用户搜索类似于&#34; mayor y de buenos sentimientos&#34;最终的查询将类似于:
((mayor) OR (y) OR (de) OR (buenos) OR (sentimientos))
所以,问题是这个查询总是返回零结果,但是如果我手动删除(显示为停用词)&#34; y&#34;和&#34; de&#34;它按预期工作,并使用此查询返回数千个结果:
((mayor) OR (buenos) OR (sentimientos))
在此问我之前我曾尝试过:
奖励:我也尝试添加以下分析器,但没有任何变化
<filter class="solr.CommonGramsFilterFactory" words="stopwords_es.txt" ignoreCase="true"/>