我在后台使用 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;
}
}
架构.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
都不匹配,因此未找到匹配项。
如果您想对空格以及 /
进行标记,您可以在自己的代码中处理它,或者可能使用诸如 WordDelimiterFilter 之类的东西。您还可以使用 WhitespaceTokenizer 并使用 WordDelimiterFilter 的自定义分隔符列表来按 /
进行分割,或者您可以使用 PatternTokenizer提供您自己的一组正则表达式来分割文本(例如使用 /
和空格。
使用 solr 管理下的分析页面来准确查看您的字段是如何处理和标记化的。
关于java - 如何在 Lucene/Solr 中正确实现我的自定义分词器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953572/