[英]What is docID in IndexReader.getTermVector(int docID ,String field) in Lucene 8.5.1 and how does it work?
我正在尝试从 Lucene 的文档字段中获取所有称为Terms
的术语和相关帖子(即如何计算 Lucene 中的术语频率?)。 根据文档,有一种方法可以做到这一点:
public final Terms getTermVector(int docID, String field) throws IOException
检索此文档和字段的术语向量,如果没有索引术语向量,则检索 null。 返回的 Fields 实例就像一个单文档倒排索引(docID 将为 0)。
有一个名为int docID
的字段。 这是什么?? 对于给定的文档,它的 id 字段是什么以及 Lucene 如何识别它? 根据 Lucene 的文档,我使用StringField
作为 id 并且它不是int
。
import org.apache.lucene.document.*;
Document doc = new Document();
Field idField = new StringField("id",post.Id,Field.Store.YES);
Field bodyField = new TextField("body", post.Body, Field.Store.YES);
doc.add(idField);
doc.add(bodyField);
我有五个问题:
id
字段用作此文档的docId
? 甚至 Lucene 有没有?String
作为 id 但这个方法给出了一个int
。 它会导致问题吗?TextField
。 有没有办法检索该字段的术语向量( Terms
)? 我不想按照此处的说明重新索引我的文档,因为它太大(35-GB)。TextField
获取每个术语频率? 要计算词频,我们可以使用IndexReader.getTermVector(int docID,String field)
。 int docID
是指由 Lucene 创建的文档 ID 的字段。 您可以通过以下代码检索docID
:
String index = "index/AIndex/";
String query = "the query text"
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("docField", analyzer);
Query lQuery = parser.parse(query);
]TopDocs results = searcher.search(lQuery , requiredHits);
ScoreDoc[] hits = results.scoreDocs;
int numTotalHits = (int) results.totalHits.value;
for (int i = start; i < numTotalHits; i++)
{
int docID = hits[i].doc;
Terms termVector = reader.getTermVector(docID, "docField");
}
每个termVector
object 都有与文档字段相关的术语和频率,您可以通过以下代码检索它们:
private HashMap<String,Long> termsFrequency = new HashMap<>();
TermsEnum itr = termVector.iterator();
int allTermFrequency=0;
BytesRef term;
while ((term = itr.next()) != null){
String termText = term.utf8ToString();
long tf = itr.totalTermFreq();
termsFrequency.put(termText, tf);
allTermFrequency += itr.totalTermFreq();
}
注意:当您为文档编制索引时,不要忘记设置存储术语向量,正如我在此处(或这个)中解释的那样。 如果您在未设置存储术语向量的情况下为文档编制索引,则getTermVector
方法将返回null
。 所有类型的预定义 Lucene 字段默认禁用此选项。 所以你需要设置它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.