java - 如何在 Lucene/Solr 中正确实现我的自定义分词器?

标签 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;
}
}

架构.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":"之类的内容来进一步匹配它黑白色”,但它不起作用..该字段仅与初始值“黑/白”

匹配

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

非常感谢!

最佳答案

由于您的分词器/进行分词,因此“黑白色”查询将是内容为黑白色的单个标记。由于该标记与 blackwhite 都不匹配,因此未找到匹配项。

如果您想对空格以及 / 进行标记,您可以在自己的代码中处理它,或者可能使用诸如 WordDelimiterFilter 之类的东西。您还可以使用 WhitespaceTokenizer 并使用 WordDelimiterFilter 的自定义分隔符列表来按 / 进行分割,或者您可以使用 PatternTokenizer提供您自己的一组正则表达式来分割文本(例如使用 / 和空格。

使用 solr 管理下的分析页面来准确查看您的字段是如何处理和标记化的。

关于java - 如何在 Lucene/Solr 中正确实现我的自定义分词器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953572/

相关文章:

java - 如何使用参数调用 Spring 工厂方法

solr - SchemaChange 是否需要重新索引

Java Lucene 从 Document 对象获取术语

java - Java MVC中如何处理事件

java - Hadoop 上的 HDFS 位置是什么?

java - 从一个 View 切换到另一个 View : Java

solr - Solr last_index_time时区差异,所以输出错误

performance - Solr 可以连接内存中的表吗?

java - Lucene的FloatField和FloatDocValuesField有什么区别?

java - Lucene 4.0 中的词频