【问题标题】:Solr/Dismax with dynamic fields具有动态字段的 Solr/Dismax
【发布时间】:2012-01-20 22:36:04
【问题描述】:

我刚刚在我的 solr 架构中添加了一些通配符动态字段:

<dynamicField name="*_s" type="string" indexed="true" stored="true"/>

然后我添加一个字段名称为 asdfasdf_s 的文档

如果我执行一个显示此文档的查询,我会看到 asdfasdf_s 以我设置的值存储在结果中。

但是,如果我按该动态字段中的值进行搜索,则不会得到任何结果。我正在使用 dismax 查询解析器。

【问题讨论】:

    标签: search solr dismax


    【解决方案1】:

    这很可能是因为您将动态字段的类型字段类型设置为string。默认情况下,字符串字段类型(如下所示)对搜索不太友好,因为它没有任何关联的索引或查询时间分析器。

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    

    我建议您更改为类似text_general 字段类型,如下所示。

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    

    由于 text_general 更适合查询字段,因为它标记化、小写并为添加到其中的值提供同义词。在不更改动态字段类型的情况下获得相同好处的一种快速方法是使用 copyField 将动态值复制到 text_general 字段类型或其他更适合查询的字段类型。

    【讨论】:

    • @user623324,换句话说,string 数据类型按原样存储字符串,并且只能进行“等于”匹配(asdfasdf_s 等于“吃食物”)。 text_general 类型存储(如果您将其设置为)并为其编制索引;使其可用于搜索(asdfasdf_s 中是否提到了“吃”或“食物”)。您可能需要两种类型的属性,因此请使用 copyField 维护两个副本。
    猜你喜欢
    • 2015-04-10
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多