Lucene学习,获取全部数据两方法

Lucene学习,一直想获取全部数据,拿来进行分页。但是一直没有发现合适的方法。Lucene并不提供无条件查询。所以自己总结两个方法,其中一个是来自网络的Lucene自身提供的。另一个是自己原创的。本文适合对Lucene索引和搜索程序有一定认识的人士!完全不会的需要稍微补习!

第一个方法:用 searcher.MaxDoc(); 获取全部最大文档数。缺点是,无法排序,最后写入的文档放在最前面了。

提示性代码片段

//建立分析器
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
//建立索引搜索,指定索引目录
IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(new System.IO.DirectoryInfo(IndexPath)), true);
//获取最大文档数量
count = searcher.MaxDoc();
[20111117]补充一下:MaxDoc()是所有文档数,包括删除和未删除的文档。NumDocs()则是所有未被删除的文档总数。而NumDocs()是在IndexReader类下。读取也可以使用IndexReader来实现。

第二个方法:加入一个特定的标识字段,用一个短,特殊的字符做值,需要在索引的时候就加入。

提示性代码片段

Document doc = new Document();
//加入字段
doc.Add(new Field("AllFieldFlag", "★", Field.Store.YES, Field.Index.NOT_ANALYZED));
//加入索引文档
writer.AddDocument(doc);

然后在搜索的时候加入一个固定搜索条件,就是对这个加入字段的搜索,值就用自定义的拿个符号

//建立分析器
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
//建立索引搜索,指定索引目录
IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(new System.IO.DirectoryInfo(IndexPath)), true);
MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, new string[] { "AllFieldFlag" }, analyzer);
//建立查询器,用剖析器建立查询
Query query = parser.Parse("★");
//排序
Sort sort = new Sort(new SortField("CreateDatetime", SortField.STRING));
//在查询上开始查询并将结果送入搜集器
searcher.Search(query, new QueryWrapperFilter(query), hits);
..........

可以排序,只是在搜索时调整好自带条件和 外部条件的组合。

如果有错误,更好的方法请说!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值