Lucene 3.6和自定义Tokenizer / Analyzer用于特殊字符

时间:2014-10-22 12:31:09

标签: java search indexing lucene

我在我的索引和搜索项目中使用Lucene 3.6和 StandardAnalyzer 。这样的分析器通过所有特殊字符(@,#, - ,_)分割搜索查询字符串。

例如:如果我要搜索“somename@gmail.com#2nd place”,tokenizer会创建这样的查询字符串: [somename] [gmail] [com] [2nd] [place] 。但是我需要像这样的字符串: [somename @ gmail] [com] [#2nd] [place]

那么如何从停止字符中排除这样的特殊字符?

还有一个问题:我需要使用新的分析器重新编制索引,或者只使用旧索引的新分析器吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

StandardAnalyzer使用StandardTokenizer来定义语法规则(分词等)。后者Documentation说:

  

许多应用程序都有特定的tokenizer需求。如果是这个标记器   如果不适合您的申请,请考虑复制此来源   代码目录到您的项目并维护您自己的基于语法   标记生成器。

快速查看StandardTokenizer代码我猜测从"<EMAIL>"删除TOKEN_TYPES可能就足够了。或许不是: - )

是的,你需要重新索引。