我想用 Solr 实现一个自动完成功能,该功能适用于 CamelCase 中的源代码标识符。我使用EdgeNGramFilterFactorywithWordDelimiterFilterFactory来拆分 CamelCase 单词:
<fieldType class="solr.TextField" name="text_autocomplete" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="100" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
id将被isSlowTraceEnabled分成isTraceEnabled, is, Slow,Trace和Enabled.WordDelimiterFilterFactory
但我也想索引 words SlowTrace,SlowTraceEnabled这样TraceEnabled用户就可以只搜索 CamelCase 词的一部分。是否有任何过滤器可以从 CamelCase 单词中生成这些子字符串?
(我在 Lucene in action book, 2nd edition, p. 388 in the Case study of Krugle 中发现了一个类似的问题。但是解决方案非常复杂,我只需要搜索大约 1000 个 ID,而不是像在 Krugle 中那样多的 ID .)