具有动态场的Solr / Dismax

时间:2012-01-20 22:36:04

标签: search solr dismax

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

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

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

的文档

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

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

1 个答案:

答案 0 :(得分:0)

这很可能是因为您的动态字段的类型字段类型设置为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字段类型或其他更适合查询的字段类型对