我想在单词中搜索文字,如 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\"]+" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="char-mapping.txt" />
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\"]+" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldtype>
在查询中使用 foo 时(q = content:* foo *)搜索时间过长,因为我的索引包含500,000个文档并占用30 GB。
有更好的方法进行搜索吗?
提前谢谢。
答案 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>