如何在Lucene 5中获得跨度术语查询的匹配跨度?

如何在Lucene 5中获得跨度术语查询的匹配跨度?,lucene,Lucene,在Lucene中,要获得术语周围的单词,建议使用Span查询。有很好的穿行 应该使用getSpans()方法访问这些跨距 然后在Lucene 4中,API发生了变化,getSpans()方法变得更加复杂,最后,在最新的Lucene发行版(5.3.0)中,此方法被删除(显然移动到了SpanWeight类) 那么,当前使用哪种方法来访问与span-term查询匹配的span?方法如下 LeafReader pseudoAtomicReader = SlowCompositeReaderWrapper

在Lucene中,要获得术语周围的单词,建议使用Span查询。有很好的穿行

应该使用getSpans()方法访问这些跨距

然后在Lucene 4中,API发生了变化,getSpans()方法变得更加复杂,最后,在最新的Lucene发行版(5.3.0)中,此方法被删除(显然移动到了SpanWeight类)


那么,当前使用哪种方法来访问与span-term查询匹配的span?

方法如下

LeafReader pseudoAtomicReader = SlowCompositeReaderWrapper.wrap(reader);
Term term = new Term("field", "fox");
SpanTermQuery spanTermQuery = new SpanTermQuery(term);
SpanWeight spanWeight = spanTermQuery.createWeight(is, false);
Spans spans = spanWeight.getSpans(pseudoAtomicReader.getContext(), Postings.POSITIONS);
Lucene的5.3版中也不再支持通过span.next()迭代跨度。要在跨度上迭代,可以执行以下操作

int nxtDoc = 0;
while((nxtDoc = spans.nextDoc()) != spans.NO_MORE_DOCS){
  System.out.println(spans.toString());
  int id = nxtDoc;
  System.out.println("doc_id="+id);
  Document doc = reader.document(id);
  System.out.println(doc.getField("field"));
  System.out.println(spans.nextStartPosition());
  System.out.println(spans.endPosition());
}
int nxtDoc = 0;
while((nxtDoc = spans.nextDoc()) != spans.NO_MORE_DOCS){
  System.out.println(spans.toString());
  int id = nxtDoc;
  System.out.println("doc_id="+id);
  Document doc = reader.document(id);
  System.out.println(doc.getField("field"));
  System.out.println(spans.nextStartPosition());
  System.out.println(spans.endPosition());
}