在lucene中,我可以执行以下操作
doc.GetField("mycustomfield").StringValue();
这将检索索引文档中列的值。
我的问题,对于相同的'doc'
,有没有办法获得Doc. Id
?卢克显示它,因此必须有办法解决这个问题。我需要它来删除更新文件。
我搜索了文档,但没有找到在GetField中使用的术语,或者是否已经有另一种方法。
答案 0 :(得分:2)
原则上你必须这样做:
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
答案 1 :(得分:1)
我怀疑你找不到任何关于确定特定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
}