Solr 停用词替换为 _ 符号

标签 solr solrj stop-words spring-data-solr

我在自动建议中遇到 solr 停用词问题。所有停用词均替换为 _ 符号。

例如,我在字段“deal_title”中有文本“简单文本”。当我尝试搜索单词“简单”时,solr 显示下一个结果“_简单文本_”,但我期望“简单文本”。

有人可以解释一下为什么会这样以及如何解决它吗? 这是我的 schema.xml 的一部分

<fieldType class="solr.TextField" name="text_auto">
    <analyzer type="index">
        <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" outputUnigramsIfNoShingles="false" /> 
    </analyzer> 
    <analyzer type="query">
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        <tokenizer class="solr.StandardTokenizerFactory"/> 
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    </analyzer>
</fieldType>

<field name="deal_title" type="text_auto" indexed="true" stored="true" required="false" multiValued="false"/>

<fieldType name="text_general" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

最佳答案

我在 Solr 6.3 中的解决方案(其中 enablePositionIncrements="false" 不再可能)是:

  1. 删除停用词
  2. 带有 fillerToken="" 的木瓦(删除 _)
  3. 删除前导和尾随空格
  4. 删除重复项

    <filter class="solr.StopFilterFactory" format="snowball" words="lang/stopwords_de.txt" ignoreCase="true"/>
    <filter class="solr.ShingleFilterFactory" fillerToken=""/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="(^ | $)" replacement=""/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    

关于Solr 停用词替换为 _ 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459949/

相关文章:

ruby-on-rails - 如何从Sunspot Solr Rubygem旋转,覆盖或关闭日志记录?

Solr 高亮停用词

ubuntu - 树莓派 2 上的 solr - bin/solr 创建核心导致连接被拒绝错误

java - Solr/Solrj 分页

solrj - 索引后锁定的文件

java - 使用 SolrJ 删除整个索引

language-agnostic - “Stop words”列出英语吗?

python - 用 Python 计算 Dataframe 中的单词数

java - 无法通过 JAVA 连接到 Solr 应用程序

solr - 如何删除一个月前的文件