在Lucene.net中搜索的过滤索引

本文关键字:过滤 索引 搜索 Lucene net | 更新日期: 2023-09-27 18:02:02

我目前正在做一个涉及c#中Lucene库的项目,但是我已经达到了一个关于索引内文档检索的项目设计问题。我的索引中的文档已经创建了几个字段,我希望能够在其中两个字段之间进行过滤,然后搜索这个子集的术语,但我仍然熟悉lucene,我不完全确定这是否可能。我已经学会了如何执行基本查询,但我认为我应该使用lucene过滤器类,但我不完全确定如何。如果有人能就此提供建议,我将不胜感激。

我正在完成的项目涉及索引电子邮件消息从各种电子邮件帐户。我的索引中的文档有以下一些字段:账号:(例如fake@fake.com)文件夹:(例如:已发送、废纸篓、收件箱……)数据:(邮件正文)

我希望能够过滤我的索引,所以我可以有一个子集,其中只包含特定帐户和文件夹的文档,然后在此之后,我希望能够搜索这个子集的数据字段。

在Lucene.net中搜索的过滤索引

正如@Jf Beaulac建议的那样,您可以使用布尔查询进行"过滤"。

private Query CreateFilteredQuery (string account, string folder, Query criteria)
{
     BooleanQuery bq = new BooleanQuery();
     bq.Add(new TermQuery (new Lucene.Net.Index.Term ("account", account)), BooleanClause.Occur.MUST);
     bq.Add(new TermQuery (new Lucene.Net.Index.Term ("folder", folder)), BooleanClause.Occur.MUST);
     bq.Add(criteria, BooleanClause.Occur.MUST);
     return bq;
}

Query filteredQuery = CreateFilteredQuery ("fake@fake.com", "inbox", myQueryParser.Parse (criteria));
var hits = myIndexSearcher.Search (filteredQuery);

这里有一个关于查询和过滤器之间区别的好问题:为什么我们在搜索

时使用过滤器?