C# 用于在Lucene.net中搜索的筛选索引

C# 用于在Lucene.net中搜索的筛选索引,c#,lucene,indexing,lucene.net,filtering,C#,Lucene,Indexing,Lucene.net,Filtering,我目前正在从事一个涉及C#中Lucene库的项目,但是我在项目设计中遇到了一个问题,涉及到索引中文档的复审。我的索引中的文档是用几个字段创建的,我希望能够在其中两个字段之间进行筛选,然后搜索此子集中的术语,但是我仍然熟悉lucene,不完全确定这是否可行。我已经学会了如何执行基本查询,但我认为我应该使用lucenes filter类,但我不太确定如何执行。如果有人能就此提供建议,我将不胜感激 我正在完成的项目涉及从各种电子邮件帐户索引电子邮件消息。“我的索引”中的文档具有以下某些字段: 账户:(

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

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


我希望能够筛选我的索引,这样我就可以有一个子集,其中只包含来自特定帐户和文件夹的文档,然后我希望能够搜索该子集中的数据字段。

正如@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);

关于查询和过滤器之间的区别,这里有一个很好的问题:

正如@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);

关于查询和筛选器之间的区别,这里有一个很好的问题:

提供有关您正在执行的查询以及要应用筛选器的字段中的数据的更多详细信息,这将有助于向您提供建议。了解您指的是查询还是筛选器也很有用。查询将直接查找数据,但过滤器用于从查询中检索数据子集。过滤器是必要的还是我们说的是唯一的单个调用,因此它将是一个查询?从您的附加输入中,您不需要使用过滤器,而是在布尔查询中组合多个条件,您是使用QueryParser还是使用BooleanQuery类手动生成查询?提供有关正在执行的查询以及要应用筛选器的字段中的数据的更多详细信息将有助于向您提供建议。了解您指的是查询还是筛选器将非常有用。查询将直接查找数据,但过滤器用于从查询中检索数据子集。过滤器是必要的还是我们说的是唯一的单个调用,因此它将是一个查询?从您的附加输入中,您不需要使用过滤器,而是在BooleanQuery中组合几个条件,您是使用QueryParser还是使用BooleanQuery类手动构建查询?