java - Lucene 3.6 和用于特殊字符的自定义分词器/分析器

标签 java search indexing lucene

我在索引和搜索项目中使用 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/

相关文章:

java - 注册 ChangeFeedEventHost 时 COSMOS DB 中出现 nsupportedOperationException

java - 如何使用 Serenity、JBehave 和 Selenium 设置配置的嵌入器以使用元过滤器 (-skip)

java - 将逗号分隔的字符串转换为整数数组的最佳方法

javascript - 有没有jquery插件可以显示最近的搜索历史

ruby-on-rails - 收集来自多模型查询的搜索结果

sql - 优化 BETWEEN 日期语句

java - Java ConcurrentHashMap 分区数量增加的缺点?

mysql - sphinx 和一对多关联

image - Matlab 使用线性索引对二维进行索引,同时保持第三维不变

mysql - 理解EXPLAIN创建列索引的依据