4

我正在使用 Lucene(或更具体地说是 Compass)在论坛中记录线程,我需要一种方法来提取讨论背后的关键字。也就是说,我不想索引某人所做的每个条目,而是我有一个与特定上下文相关的“关键字”列表,如果条目与关键字匹配并且高于阈值,我会添加这些条目到索引。

我希望能够使用分析器的功能来剥离事物并发挥其魔力,然后从分析器返回标记以匹配关键字,并计算某些单词被提及的出现次数。

有没有办法从分析器中获取令牌,而无需索引每个条目的开销?

我在想我必须维护一个 RAMDirectory 来保存所有条目,然后使用我的关键字列表执行搜索,然后将相关文档合并到持久性管理器以实际存储相关条目。

4

2 回答 2

3

您应该能够完全跳过使用 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());
}

更好的是,编写你自己的分析器(它们并不难,看看现有的源代码),使用你自己的过滤器来观察你的关键字。

于 2010-01-10T13:49:54.007 回答
2

你走在正确的道路上。您可以使用 RAMDirectory 创建每个文档的索引,然后在其上搜索以检查该文档是否包含相关关键字。如果否,则丢弃该文件。否则,您将其添加到持久/主索引。

您不需要将所有文档都保存在内存中。它会不必要地消耗大量内存。

于 2009-10-15T09:04:37.887 回答