Я использую Lucene 8.4 в Java и пытаюсь получить начальное и конечное смещение совпадений входного запроса. Мой код выглядит следующим образом:
QueryBuilder bldr = new QueryBuilder(new StandardAnalyzer());
Query q1 = bldr.createPhraseQuery("sentences", query);
BooleanQuery.Builder chainQryBldr = new BooleanQuery.Builder();
chainQryBldr.add(q1, BooleanClause.Occur.MUST);
BooleanQuery finalQry = chainQryBldr.build();
TopDocs result;
try {
searcher = searchManager.acquire();
result = searcher.search(finalQry, 10000);
for (int i = 0; i < result.scoreDocs.length; i++) {
ScoreDoc scoreDoc = result.scoreDocs[i];
Document doc = searcher.doc(scoreDoc.doc);
// Ideally I would want something like:
// for (Match m : doc.getMatches()) {
// ... use m.getStartOffset() and m.getEndOffset() ...
// }
results.add(parseDoc(doc));
}
} catch (IOException e) {
Я искал везде, но со всеми различными версиями Lucene я действительно не могу найти то, что работает. Как я указывал в коде, в идеале я хотел бы получить доступ к начальному и конечному смещению (char) всех совпадений текущего документа, но если это невозможно, то (например, я повторяю все совпадения независимо от текущего документа), что может быть в порядке.