有Luwak 到新Lucene 版本的迁移文档吗?

Is there a migration document from Luwak to the new Lucene version?

我在研究反向索引时发现了“Luwak”。问题在于,在 Lucene 8.2.0 的版本中,Luwak 被合并到 Lucene 中,并转变为一个“Monitor”class。因此,不再维护原始存储库。原始 repo 中提到了一段基本使用代码 readme:

Monitor monitor = new Monitor(new LuceneQueryParser("field"), new TermFilteredPresearcher());

MonitorQuery mq = new MonitorQuery("query1", "field:text");
List<QueryError> errors = monitor.update(mq);

// match one document at a time
InputDocument doc = InputDocument.builder("doc1")
                        .addField(textfield, document, new StandardAnalyzer())
                        .build();
Matches<QueryMatch> matches = monitor.match(doc, SimpleMatcher.FACTORY);

// or match a batch of documents
Matches<QueryMatch> matches = monitor.match(DocumentBatch.of(listOfDocuments), SimpleMatcher.FACTORY);

但是 Lucene 版本没有这样的“基本用法”代码。

Luwak 的主要贡献者之一,Alan Woodward 提到here

I'll add a migration document to the luwak repository to help people moving from the standalone project to the lucene version.

但是没有找到这样的文档,经用户确认here

那么,如何开始使用“Lucene 嵌入式 Luwak 版本”或 Monitor class?

我查看了 Monitor class 的 documentation,这是我想出的代码,用于复制 Luwak 存储库自述文件中的“基本用法”代码.

Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("content", analyzer);

Monitor monitor = new Monitor(analyzer);

MonitorQuery mq = new MonitorQuery("query1", parser.parse("content:test"));
monitor.register(mq);
    

Document doc = new Document();
doc.add(new TextField("content", "This is a test document", Field.Store.YES));

MatchingQueries<QueryMatch> matches = monitor.match(doc, QueryMatch.SIMPLE_MATCHER);

需要注意的几点如下:

  1. Monitor 的构造函数采用 Analyzer 而不是 LuceneQueryParser。如果未提及 Presearcher,则使用“默认术语过滤预搜索器”。
  2. 而不是 updateMonitorregister 方法和 void return 类型。
  3. 代替 Luwak 中使用的 InputDocumentMonitor 使用 Lucene 的内置 Document class。
  4. match方法中传递的MatcherFactory参数可以通过这个QueryMatch.SIMPLE_MATCHER找到。

PS:如果有人想使用 Luwak 但正在为文档而苦恼,那么这是一个很好的起点。但是,这可以作为“移民文件”的一部分吗?只有 @romseygeek (Alan Woodward) 可以告诉 xD。