如何检查lucene索引中是否存在文档?

如何检查lucene索引中是否存在文档?,lucene,Lucene,我有一个新闻文章索引,我保存标题、链接、新闻描述。。有时,来自同一链接的同一新闻可能由不同的新闻来源以不同的标题发布。它不希望两次添加完全相同的描述文章。如何查找文档是否已经存在?我假设您正在使用Java。 假设您的链接作为StringField保存在索引中(因此您使用的任何分析器都不会将链接分解为多个术语),您可以使用TermQuery TopDocs results=searcher.search(新术语查询(新术语(“链接”),”http://example.com")), 1); 如果(

我有一个新闻文章索引,我保存标题、链接、新闻描述。。有时,来自同一链接的同一新闻可能由不同的新闻来源以不同的标题发布。它不希望两次添加完全相同的描述文章。如何查找文档是否已经存在?

我假设您正在使用Java。 假设您的链接作为StringField保存在索引中(因此您使用的任何分析器都不会将链接分解为多个术语),您可以使用TermQuery

TopDocs results=searcher.search(新术语查询(新术语(“链接”),”http://example.com")), 1);
如果(results.totalHits==0){
单据单据=新单据();
//使用字段在此处创建文档
//链接字段应存储为StringField
文件添加(新字符串字段(“链接”)http://example.com“,已存储。是”);
writer.addDocument(doc);
}
请注意,StringFields是精确存储的,因此您可能希望在搜索/索引时转换为小写

如果希望确保已存在的字段不超过1个,则可以使用“发生.应”条件将其作为布尔查询运行:

BooleanQuery匹配查询=新建BooleanQuery();
添加(新术语查询(新术语(“链接”)http://example.com),发生。应);
matchingQuery.add(新术语查询(新术语(“描述”,“文章的唯一描述”)),出现。应该);
TopDocs results=searcher.search(匹配查询,1);
如果(results.totalHits==0){
单据单据=新单据();
//使用字段在此处创建文档
//链接字段应存储为StringField
文件添加(新字符串字段(“链接”)http://example.com“,已存储。是”);
doc.add(新的StringField(“描述”,“文章的唯一描述”,Stored.YES));
//注意:如果需要对描述进行标记化,则需要向文档中添加另一个具有不同字段名的文本字段
doc.add(新文本字段(“descriptionText”,“文章的唯一描述”,Stored.NO));
writer.addDocument(doc);
}

我仍然面临一些问题。。似乎相同的文章以不同的链接发布在不同的报纸上。。所以除了link,我还需要另一个字段作为主字段。。为了避免同一篇文章在不同的报纸网站上出现多个搜索结果。。有什么建议吗?你如何判断每篇文章都是一样的?描述?如果是,则可以使用描述作为唯一标识字段。是,通过描述。。但我想避免索引中出现两种重复项,。具有相同描述和相同链接的文章。。因为它们最终指向相同的数据。。那么,如何拥有两个唯一标识符?@Sneha我更新了答案,以防止两个字段重复。