一般来说,如果想要从Lucene索引中获取Field的值,那么需要在索引阶段设置Field.Store.YES才可以,然后在搜索阶段得到TopDocs对象之后,用它去获取ScoreDoc再取出Document,使用Document获取存储在索引中的值。但是我们都知道,存储字段是需要硬盘空间的,如果想要追求极致的存储空间并且获取Field的值,那么在不存储的情况下,如何获取呢?其实仔细思索一下,在我们只索引不存储的情况下,Lucene依然可以判断搜索是否命中,这说明在Lucene索引中依然存有一份Field的值,这样在搜索阶段才能判断是否匹配。本文就是探讨在这种情形下,使用Lucene的核心包获取没有存储的Field的值的几种方法,如果你还有其它不同的方法请留言。
- testGetFieldByStore 演示存储Field值时如何获取
- testGetFieldByTerms 演示通过Terms获取没有存储的Field值
- testGetFieldByFieldDocWithSorted 演示通过FieldDoc获取没有存储的值
- testGetFieldByTermVector 演示通过TermVector获取没有存储的值
- testGetFieldByTermVectors 演示通过TermVectors获取没有存储的值
这里补充一下,在lucene-suggest包中,有LuceneDictionary类,通过该类的getEntryIterator方法也能获取没有存储的Field的值,不过其本质和通过Terms获取方式一样,在此不再列举。源码示例如下
|
|