我正在使用Lucene(或更具体的Compass)来记录论坛中的线程,我需要一种方法来提取讨论背后的关键字。也就是说,我不想索引某人所做的每个条目,而是我有一个与某个特定上下文相关的“关键字”列表,如果该条目与关键字匹配且超过阈值,我会添加这些条目到索引。
我希望能够利用分析仪的功能去除事物并发挥其魔力,但是然后从分析器返回标记以匹配关键字,并且还计算某些单词出现的次数提及。
有没有办法从分析器中获取令牌,而没有为每个条目编制索引的开销?
我以为我必须维护一个RAMDirectory来保存所有条目,然后使用我的关键字列表执行搜索,然后将相关文档合并到持久性管理器以实际存储相关内容条目。
答案 0 :(得分:2)
你走在正确的道路上。您可以使用RAMDirectory创建每个文档的索引,然后在其上搜索以检查该文档是否包含相关关键字。如果不是,则丢弃该文件。否则,将它添加到持久性/主索引。
您无需将所有文档保存在内存中。它会不必要地消耗大量内存。
答案 1 :(得分:2)
您应该可以完全跳过使用RAMDirectory。您可以直接致电StandardAnalyzer
并让它将标记列表传回给您(也称为关键字)。
StandardAnalyzer analyzer = new StandardAnalyzer;
TokenStream stream = analyzer.tokenStream("meaningless", new StringReader("<text>"));
while (true) {
Token token = stream.next();
if (token == null) break;
System.out.println(token.termText());
}
更好的是,编写自己的分析器(它们并不难,看看现有分析器的源代码),它们使用您自己的过滤器来监控您的关键字。