有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);
需要注意的几点如下:
Monitor
的构造函数采用 Analyzer
而不是 LuceneQueryParser
。如果未提及 Presearcher
,则使用“默认术语过滤预搜索器”。
- 而不是
update
,Monitor
有 register
方法和 void
return 类型。
- 代替 Luwak 中使用的
InputDocument
,Monitor
使用 Lucene 的内置 Document
class。
- 在
match
方法中传递的MatcherFactory
参数可以通过这个QueryMatch.SIMPLE_MATCHER
找到。
PS:如果有人想使用 Luwak 但正在为文档而苦恼,那么这是一个很好的起点。但是,这可以作为“移民文件”的一部分吗?只有 @romseygeek (Alan Woodward) 可以告诉 xD。
我在研究反向索引时发现了“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);
需要注意的几点如下:
Monitor
的构造函数采用Analyzer
而不是LuceneQueryParser
。如果未提及Presearcher
,则使用“默认术语过滤预搜索器”。- 而不是
update
,Monitor
有register
方法和void
return 类型。 - 代替 Luwak 中使用的
InputDocument
,Monitor
使用 Lucene 的内置Document
class。 - 在
match
方法中传递的MatcherFactory
参数可以通过这个QueryMatch.SIMPLE_MATCHER
找到。
PS:如果有人想使用 Luwak 但正在为文档而苦恼,那么这是一个很好的起点。但是,这可以作为“移民文件”的一部分吗?只有 @romseygeek (Alan Woodward) 可以告诉 xD。