繁体   English   中英

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

[英]Filter index for searching in Lucene.net

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM