过滤索引在Lucene.net中搜索

时间:2011-07-14 19:03:06

标签: c# lucene indexing lucene.net filtering

我目前正在研究一个涉及C#中Lucene库的项目,但是我的项目设计问题涉及到索引中文档的撤销。我的索引中的文档已经创建了几个字段,我希望能够在这两个字段之间进行过滤,然后在这个子集中搜索术语,但我仍然熟悉lucene并且我不完全确定这是否可能。我已经学会了如何执行基本查询,但我认为我应该使用lucenes过滤器类,但我不确定如何。如果有人能就此提出建议,我会很高兴

我正在完成的项目涉及索引来自各种电子邮件帐户的电子邮件。我索引中的文档包含以下某些字段: 帐号:(例如fake@fake.com) 文件夹:(例如已发送,垃圾箱,收件箱......) 数据:(电子邮件正文)

我希望能够过滤我的索引,以便我可以拥有一个仅包含来自特定帐户和文件夹的文档的子集,然后我希望能够搜索该子集的数据字段。

1 个答案:

答案 0 :(得分:4)

正如@Jf Beaulac建议的那样,你可以使用BooleanQuery进行“过滤”。

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);

以下是关于查询和过滤器之间差异的一个很好的问题:Why do we use Filters while searching