我想用 Solr 实现一个自动完成功能,该功能适用于 CamelCase 中的源代码标识符。我使用EdgeNGramFilterFactory
withWordDelimiterFilterFactory
来拆分 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 .)