2009-10-15 63 views
4

我正在使用Lucene(或者更具体地说Compass)来记录论坛中的线程,并且我需要一种方法来提取讨论后面的关键字。也就是说,我不想索引某人所做的每个条目,但是我会列出与某个上下文相关的“关键字”列表,如果该条目与某个关键字匹配并且超出了我要添加的阈值这些条目到索引。查询不带索引的lucene令牌

我希望能够使用分析仪的能力去除事物并做出其魔力,但是然后从分析仪返回令牌以匹配关键字,并且还计算某些词的出现次数被提及。

是否有办法从分析器中获取令牌,而不必为每个条目编制索引?

我想我不得不保持RAMDirectory持有所有项,然后用我的关键字列表进行搜索,然后在相关文件中合并到持久性管理实际存储的相关条目。

+0

任何人都知道下面的哪个答案更好......我正在寻找类似的问题 – andy 2010-06-03 05:55:41

回答

2

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

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

+0

+1谢谢......您如何看待下面的答案? – andy 2010-06-03 05:56:07

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()); 
} 

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

+0

+1因此,如果您不再需要这些信息,那么索引就没有好处了? – andy 2010-06-03 05:56:36

+1

啊,我的坏...你仍然需要在创建令牌之前实际索引一些东西吗?我想知道是否有办法在分析器上扔一些文本并让它返回令牌? – andy 2010-06-03 06:00:11