索引和查询分析器上的Solr StopFilterFactory无法按预期工作

时间:2015-03-17 16:02:06

标签: solr lucene django-haystack stop-words filterfactory

我已经设置了一个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))

在此问我之前我曾尝试过:

  • 避免词组拆分和OR查询构建并搜索完整的词组&#34; mayor y de buenos sentimientos&#34;比。 &#34;市长buenos sentimientos&#34;,零结果Vs千:/
  • 在谷歌搜索
  • 在stackoverflow中搜索
  • 在我阅读时,我试图使用完整路径指向停用词文件,但由于solr默认情况下不接受应用范围,因此它无法正常工作
  • 由于我使用的是django-haystack,我尝试使用Solr的管理界面执行查询(结果相同)
  • 在每次重大变更后重新索引整个solr

奖励:我也尝试添加以下分析器,但没有任何变化

<filter class="solr.CommonGramsFilterFactory" words="stopwords_es.txt" ignoreCase="true"/>

0 个答案:

没有答案