在开头和结尾使用通配符搜索solr的最佳实践

时间:2015-04-30 18:00:14

标签: solr

我想在单词中搜索文字,如 foo ,以找到barfoobar或foobar或barfoo with solr。

我的字段类型配置为:

<fieldtype name="searchableContentTokenized" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="char-mapping.txt" />
        <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\&quot;]+" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <charFilter class="solr.MappingCharFilterFactory" mapping="char-mapping.txt" />
        <tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\&quot;]+" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldtype>

在查询中使用 foo 时(q = content:* foo *)搜索时间过长,因为我的索引包含500,000个文档并占用30 GB。

有更好的方法进行搜索吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

尝试使用以下字段类型

<fieldType name="text_reference" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="back"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>