【问题标题】:Solr doesn't suggest names with dot insideSolr 不建议内部带有点的名称
【发布时间】:2016-11-22 14:08:08
【问题描述】:

我在使用 solr 的建议条款时遇到了一些问题。

我已将标题编入索引,例如。 “foo.a123”、“foo.a456”...如果搜索“foo”Solr 将 foo 作为建议返回给我,但如果我搜索“foo.a”,则不会给出任何建议。如果我搜索,该建议可以正常工作 “富一”。

我正在使用以下配置:

<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>

            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="english/synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="english/stopwords.txt"/>
            <filter class="solr.StandardFilterFactory" />
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />

            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="english/stopwords.txt"/>
            <filter class="solr.StandardFilterFactory" />
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

归档的“spell”正在使用 textSpell 配置

<field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true"/>
<copyField source="title" dest="spell"/>
<copyField source="subTitle" dest="spell"/>
<copyField source="content" dest="spell"/>

'spell' 字段用作 facet.field,本例中的 facet.prefix 将是 'foo.a'

"facet_counts": {
"facet_queries": {},
"facet_fields": {
  "spell": []
},
"facet_dates": {},
"facet_ranges": {}
}

提前感谢您的帮助。

【问题讨论】:

标签: solr solr4 facet


【解决方案1】:

只需使用 wordDelimiter 过滤器https://lucene.apache.org/core/4_4_0/analyzers-common/org/apache/lucene/analysis/miscellaneous/WordDelimiterFilter.html

 <filter class="solr.WordDelimiterFilterFactory" types="wdfftypes.txt" generateNumberParts="0" stemEnglishPossessive="0" splitOnCaseChange="1" preserveOriginal="1" catenateAll="1" catenateWords="1" catenateNumbers="1" generateWordParts="1" splitOnNumerics="1"/>

【讨论】:

  • 实际上 wordDelimeter 并没有做我想要的。我的问题是我想将带有点的单词保留为一个字符串。我将更新问题。
【解决方案2】:
solr.StandardFilterFactory

当 luceneMatchVersion(在 solrconfig.xml 中)高于“3.1”时,此过滤器在 Solr 中不再可操作。

在 Solr 4.10.4 中有 &lt;luceneMatchVersion&gt;4.10.4&lt;/luceneMatchVersion&gt;

所以在你的查询分析器中改变过滤器

【讨论】:

    【解决方案3】:

    想通了,配置按上面发布的那样工作。 wordDelmeter 也可以使用,但对我来说不是必需的。 (StandardFilterFactory 什么都不做。)

    我完全误解了归档配置中的stored="false" 选项。我预计不需要将文档重新写入索引的行为,但实际上该标志定义了该文件是否可在搜索结果中检索。因此,我只需要重新索引所有文档。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多