繁体   English   中英

获取Lucene的Doc ID

[英]Getting the Doc ID in Lucene

在lucene,我可以做以下事情

doc.GetField("mycustomfield").StringValue();

这将检索索引文档中列的值。

对于同样的'doc' ,我的问题是有办法获得Doc. Id Doc. Id 卢克显示它,因此必须有办法解决这个问题。 我需要它删除更新文件。

我搜索了文档,但没有找到在GetField中使用的术语,或者是否已经有另一种方法。

事实证明你必须这样做:

var hits = searcher.Search(query);
var result = hits.Id(0);

相反

var results = hits.Doc(i);
var docid = results.<...> //there's nothing I could find there to do this

我怀疑你找不到任何关于确定特定Lucene文档ID的文档的原因是因为它们不是真正的“id”。 换句话说,它们不一定要被查找和存储以供以后使用。 实际上,如果这样做,您将无法获得您希望的结果,因为在优化索引时ID将会更改。

相反,将ID视为索引开头的特定文档的当前“偏移量”,当从索引文件中物理删除已删除的文档时,这将更改。

现在说,查找文档“id”的正确方法是:


QueryParser parser = new QueryParser(...);
IndexSearcher searcher = new IndexSearcher(...);
Hits hits = searcher.Search(parser.Parse(...);

for (int i = 0; i < hits.Length(); i++)
{
   int id = hits.Id(i);

   // do stuff
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM