0

我想用 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,TraceEnabled.WordDelimiterFilterFactory

但我也想索引 words SlowTraceSlowTraceEnabled这样TraceEnabled用户就可以只搜索 CamelCase 词的一部分。是否有任何过滤器可以从 CamelCase 单词中生成这些子字符串?

(我在 Lucene in action book, 2nd edition, p. 388 in the Case study of Krugle 中发现了一个类似的问题。但是解决方案非常复杂,我只需要搜索大约 1000 个 ID,而不是像在 Krugle 中那样多的 ID .)

4

0 回答 0