总算搞明白 lucene 中关于Store.YES  关于Store.NO的解释了

一直对Lucene Store.YES不太理解,网上多数的说法是存储字段,NO为不存储。

这样的解释有点郁闷:字面意思一看就明白,但是不解。

之前我的理解是:如果字段可以不存储,那要怎么搜索这个不存储的字段呢?

原来Lucene就是这样,可以设置某些字段为不存储,但是可以用来检索。

终于在一篇文章里看到这几句话,突然间就明白了。

  1. //Store.YES 保存 可以查询 可以打印内容
  2. Field storeYes = new Field("storeyes","storeyes",Store.YES,Index.TOKENIZED);
  3. //Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间,但是这个索引是存在的,可以通过这个索引去检索
  4. Field storeNo = new Field("storeno","storeno",Store.NO,Index.TOKENIZED);
  5. //Store.COMPRESS 压缩保存 可以查询 可以打印内容 可以节省生成索引文件的空间,Field storeCompress = new Field("storecompress","storecompress",Store.COMPRESS,Index.TOKENIZED);

至此,对于理解Store.YES,Store.NO 就是不存储就不能直接获取此字段的内容,存储了就可以。但是两者都可以用于检索。

字段是否能被搜索,还与Index有关。

package luxun.lucene.base;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.FieldDoc;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.SortField.Type;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopFieldDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class SortFieldValueTest {
    
    @SuppressWarnings("deprecation")
    public  void buildIndex() throws CorruptIndexException, LockObtainFailedException, IOException {
        File indexDir = new File("/home/cristo/luxun_test/luxunlucenetest/04/index");
        // dataDir is the directory that hosts the text files that to be indexed
        Directory directory = new SimpleFSDirectory(indexDir);
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
        IndexWriter writer = new IndexWriter(directory,     new IndexWriterConfig(Version.LUCENE_47, analyzer));
        Document doc = new Document();
        doc.add(new Field("id", "1", Store.YES, Index.NO));
        doc.add(new Field("text", "lucene", Store.NO, Index.ANALYZED));
        doc.add(new Field("time", "2010", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        doc.add(new Field("tide", "149", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        writer.addDocument(doc);
        doc = new Document();
        doc.add(new Field("id", "3", Store.YES, Index.NO));
        doc.add(new Field("text", "lucene", Store.NO, Index.ANALYZED));
        doc.add(new Field("time", "2011", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        doc.add(new Field("tide", "14", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        writer.addDocument(doc);
        doc = new Document();
        doc.add(new Field("id", "2", Store.YES, Index.NO));
        doc.add(new Field("text", "lucene", Store.NO, Index.ANALYZED));
        doc.add(new Field("time", "2001", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        doc.add(new Field("tide", "13", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        writer.addDocument(doc);
        doc = new Document();
        doc.add(new Field("id", "5", Store.YES, Index.NO));
        doc.add(new Field("text", "lucene", Store.NO, Index.ANALYZED));
        doc.add(new Field("time", "2001", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        doc.add(new Field("tide", "19", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        writer.addDocument(doc);
        doc = new Document();
        doc.add(new Field("id", "9", Store.YES, Index.NO));
        doc.add(new Field("text", "lucene", Store.NO, Index.ANALYZED));
        doc.add(new Field("time", "2171", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        doc.add(new Field("tide", "19", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
        writer.addDocument(doc);
        writer.commit();
        writer.close();
    }
    public  void searchWithOneSortField() throws CorruptIndexException, IOException {//可以通过对time属性进行索引,排序,获取对应的id
        File indexDir = new File("/home/cristo/luxun_test/luxunlucenetest/04/index");
        @SuppressWarnings("deprecation")
        IndexSearcher searcher = new IndexSearcher(IndexReader.open(FSDirectory.open( indexDir)));
        TermQuery termQuery = new TermQuery(new Term("time", "2001"));
        TopFieldDocs topFieldDocs = searcher.search(termQuery, null, 10, new Sort(new SortField("time",Type.STRING, true)));
        ScoreDoc[] sorDocs = topFieldDocs.scoreDocs;
        for (ScoreDoc doc : sorDocs) {
        //    FieldDoc fieldDoc = (FieldDoc) doc;
            System.out.println(searcher.doc(doc.doc).get("id"));
        }
    }
  
    public static void main(String[] args) throws CorruptIndexException, IOException {
        SortFieldValueTest SortFieldValueTest1=new SortFieldValueTest();
        SortFieldValueTest1.buildIndex();
        SortFieldValueTest1.searchWithOneSortField();

}
}

参考http://blog.csdn.net/telnetor/article/details/6187378

http://www.codeweblog.com/%E6%80%BB%E7%AE%97%E6%89%BE%E5%88%B0lucene-%E5%85%B3%E4%BA%8Estore-yes%E7%9A%84%E8%A7%A3%E9%87%8A%E4%BA%86/

lucene 中关于Store.YES 关于Store.NO的解释的更多相关文章

  1. SQL Server中TempDB管理(version store的逻辑结构)

    原文:SQL Server中TempDB管理(version store的逻辑结构) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/arch ...

  2. vue-learning:41 - Vuex - 第二篇:const store = new Vue.Store(option)中option选项、store实例对象的属性和方法

    vuex 第二篇:const store = new Vue.Store(option)中option选项.store实例对象的属性和方法 import Vuex from 'vuex' const ...

  3. 【Lucene3.6.2入门系列】第03节_简述Lucene中常见的搜索功能

    package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleD ...

  4. Lucene 中自定义排序的实现

    使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们 ...

  5. lucene中的IndexWriter.setMaxFieldLength()

    lucene中的IndexWriter.setMaxFieldLength() 老版本的Lucene中,IndexWriter的maxFieldLength是指一个索引中的最大的Field个数. 这个 ...

  6. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  7. lucene中Field简析

    http://blog.csdn.net/zhaoxiao2008/article/details/14180019 先看一段lucene3代码 Document doc = new Document ...

  8. lucene中TOKENIZED,UN_TOKENIZED 解釋

    Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED)); 這些地方與舊版本有很大的區別 ...

  9. Lucene中的 Query对象

    "Lucene中的 Query对象": 检 索前,需要对检索字符串进行分析,这是由queryparser来完成的.为了保证查询的正确性,最好用创建索引文件时同样的分析器. quer ...

随机推荐

  1. SSL+socket详解

    转自:http://hengstart.iteye.com/blog/842529 一.        SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对 ...

  2. 全排列dfs算法

    如下 #include <iostream> using namespace std; #define MAX 10 #define _CRT_SECURE_NO_WARNINGS int ...

  3. Google 怎么搜索

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:崔凯 链接:http://www.zhihu.com/question/20161362/answer/14180620 ...

  4. 用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据的解决办法

    用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据(实际显示的是Response Times Over Time),解决办法:在GUI模式 ...

  5. Android 内存监测工具 DDMS --> Heap(转)

    DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息.Logcat.广播状态信息.模拟电话呼叫.接收 ...

  6. ThinkPad 禁用 触摸板

    执行 xinput wowk@wowk:~$ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTES ...

  7. iosOC不可变数组遍历

    NSArray * array = @[@"1",@"2",@"3"]; NSLog(@"%@",array); //1 ...

  8. 《Windows驱动开发技术详解》之驱动程序的同步处理

    中断请求级 中断请求被分为软件中断和硬件中断两种,这些中断都映射成不同级别的中断请求级.每个中断请求都有各自的优先级别,正在运行的线程随时都可以被中断打断,进入到中断处理程序.优先级高的中断来临时,处 ...

  9. linux手工笔记

    一.vi编辑器常用命令: -------------------------------- •插入文字:I键A键 •退回命令模式:ESC •存盘:w •不存盘退出:q •存盘退出:wq •强制退出:q ...

  10. 导入Excel后绑定GridView实例

    http://blog.csdn.net/loveheronly/article/details/6715552 项目中经常用到导入导出的例子,前面做了导出的例子,现在把导入Excel的数据的例子也把 ...