【问题标题】:Querying lucene tokens without indexing在没有索引的情况下查询 lucene 令牌
【发布时间】:2010-12-06 23:07:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 任何人都知道下面哪个答案更好...我正在研究类似的问题

标签: lucene analyzer token compass-lucene


【解决方案1】:

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

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

【讨论】:

  • +1 如果您不再需要这些信息,那么索引编制没有任何好处?
  • 啊,我的错...在创建令牌之前,您仍然需要实际索引某些内容吗?我想知道是否有办法只向分析器抛出一些文本并让它返回令牌?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 2018-11-13
    • 2011-05-17
    • 2016-05-07
    • 2016-10-12
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多