2011-07-14 52 views
0

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

我正在完成的项目涉及索引来自各种电子邮件帐户的电子邮件。在我的索引文件有以下一些领域: 账户(如[email protected]) 文件夹(如发送邮件,收件箱...) 数据:(电子邮件的正文)

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

+0

提供有关您正在执行的查询的详细信息和数据要应用的过滤器上,将有助于在给予你建议 –

+0

这将是有用的知道你的意思是查询或过滤器。查询将直接查找数据,但是使用过滤器从查询中检索数据的子集。过滤器是必要的还是我们正在谈论独特的个人电话,因此这将是一个查询? – dnolan

+1

从你的额外输入你不需要使用过滤器,但结合在一个布尔查询中的几个条件,你使用QueryParser或者你使用BooleanQuery类手动构建你的查询? –

回答

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 ("[email protected]", "inbox", myQueryParser.Parse (criteria)); 
var hits = myIndexSearcher.Search (filteredQuery); 

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