我刚刚在solr模式中添加了一些通配符动态字段:
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
然后我添加一个字段名为asdfasdf_s 的文档
如果我执行一个查询来调出这个文档,我会看到asdfasdf_s是用我设置的值存储在结果中的。
但是,如果我根据该动态字段中的值进行搜索,则不会得到任何结果。我使用的是dismax查询解析器。
这很可能是因为您将动态字段的类型字段类型设置为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
字段类型或其他更适合查询的字段类型。