我正在使用 Lucene(或更具体地说 Compass)来记录论坛中的线程,我需要一种方法来提取讨论背后的关键字。也就是说,我不想对某人所做的每个条目进行索引,而是有一个与特定上下文相关的“关键字”列表,如果该条目与关键字匹配并且高于阈值,我会添加将这些条目添加到索引中。
我希望能够利用分析器的强大功能来剥离内容并发挥其魔力,然后从分析器返回标记以匹配关键字,并计算某些单词出现的次数提到过。
有没有一种方法可以从分析器获取 token ,而无需为每个条目建立索引?
我想我必须维护一个 RAMDirectory 来保存所有条目,然后使用我的关键字列表执行搜索,然后将相关文档合并到持久性管理器以实际存储相关条目。
最佳答案
您应该能够完全跳过使用 RAMDirectory。您可以直接调用 StandardAnalyzer
并让它向您传回 token 列表(也称为关键字)。
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());
}
更好的是,编写您自己的分析器(它们并不难,查看现有分析器的源代码),使用您自己的过滤器来监视关键字。
关于lucene - 在没有索引的情况下查询 lucene token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571071/