我刚刚在我的 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
字段类型或其他更适合查询的字段类型。