如何在Lucene / Solr中正确实现我的自定义标记生成器?

时间:2016-12-03 23:16:10

标签: java solr lucene

我正在使用Solr 5.5.2和Lucene 5.5.2。

我要做的是创建自定义标记生成器,用斜杠符号分隔文本。

以下是代码示例:

public class SlashSymbolTokenizer extends CharTokenizer {

public SlashSymbolTokenizer() {
}

public SlashSymbolTokenizer(AttributeFactory factory) {
    super(factory);
}

@Override
protected boolean isTokenChar(int c) {
    return c != 47 && c != 92;
}
}

schema.xml中

<fieldType name="string_with_slash_tokenizer" class="solr.TextField" sortMissingLast="true">
<analyzer>
    <tokenizer class="tokenizer.SlashSymbolTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

在索引时为字段"color":"Black/white"应用此标记生成器后,我假设我可以通过查询"color":"black white"之类的内容进一步匹配它,但它不起作用..此字段仅匹配初始值"Black/white"

我的实施有什么问题?你有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

由于您的标记生成器仅在/上标记,因此&#34;黑白色&#34;查询将是包含内容black white的单个标记。因为该令牌与blackwhite不匹配,所以找不到匹配项。

如果要在空格和/上进行标记,可以在自己的代码中处理,也可以使用像WordDelimiterFilter这样的东西。您还可以使用WhitespaceTokenizer并使用自定义分隔符列表将WordDelimiterFilter分割为/,或者您可以使用PatternTokenizer提供自己的正则表达式集来分割文本(例如使用/和空格。

使用solr admin下的分析页面确切了解您的字段的处理和标记方式。