我在索引和搜索项目中使用 Lucene 3.6 和 StandardAnalyzer。这种分析器通过所有特殊字符(@、#、-、_)分割搜索查询字符串。
例如:如果我要搜索“somename@gmail.com #2nd place”,分词器会创建这样的查询字符串:[somename][gmail][com][2nd][place]。但我需要这样的字符串:[somename@gmail][com][#2nd][place]。
那么如何从停止字符中排除这种特殊字符呢?
还有一个问题:我需要使用新的分析器重新索引所有内容,还是可以将新的分析器与旧索引一起使用?
谢谢!
最佳答案
StandardAnalyzer
使用StandardTokenizer
用于定义语法规则(断词等)。 Documentation后者说:
Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer.
快速查看StandardTokenizer
代码我猜想删除 "<EMAIL>"
来自TOKEN_TYPES
可能就足够了。或者也许不是:-)
是的,您需要重新索引。
关于java - Lucene 3.6 和用于特殊字符的自定义分词器/分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26507504/