lucene中Field简析

先看一段lucene3代码

Document doc = new Document();
doc.add(new Field("fullpath", f.getCanonicalPath(),   
                Field.Store.YES, Field.Index.NOT_ANALYZED))

Field类是文档索引期间很重要的类,控制着被索引的域值

Field.Store.* 域存储选项通过倒排序索引来控制文本是否可以搜索

变量名 释义
Index.ANALYZED 使用分析器将域值分解成独立的语汇单元流,并使每个语汇单元都能被搜索,适用于普通文本域
Index.NOT_ANALYZED 对域进行索引,但不对String进行分析,将域值作为单一的语汇单元,适用于索引那些不能被分解的域值,如URL,文件路径,电话号码等
Index.ANALYZED_NO_NORMS 不会在索引中存储norms信息,norms记录了索引中的index-time boost信息,当你进行搜索时比较费内存
Index.NOT_ANALYZED_NO_NORMS 同上,也不存储norms信息,在搜索时减少索引空间和内存耗费Index.No 使对应的域值不被搜索
Index.No 使对应的域值不被搜索

Field.Index.* 域索引选项确定是否要存储域的真实值,以便后续继续搜索时能恢复这个
变量名 释义
Stroe.YES 存储域值,该情况下原始字符串全部被保存在索引中,对需要展示搜索结果的域有用,如URL,标题
Stroe.NO 不存储域值,通常跟Index.ANALYZED共同用来索引大的文本域值,不用恢复为初始格式



在lucene4中 ,这种写法已经不合适了


doc.add(new Field("contents", new FileReader(f), TextField.TYPE_NOT_STORED));      //索引文件内容


变量名 释义
TYPE_NOT_STORED 索引,分词,不存储
TYPE_STORED

索引,分词,存储



TextField源代码对应的定义可以看出来,它其实包含了lucene3中域存储选项和域索引选项


static {
    TYPE_NOT_STORED.setIndexed(true);
    TYPE_NOT_STORED.setTokenized(true);
    TYPE_NOT_STORED.freeze();

    TYPE_STORED.setIndexed(true);
    TYPE_STORED.setTokenized(true);
    TYPE_STORED.setStored(true);
    TYPE_STORED.freeze();
  }



但是对于特殊的要求,比如路径,则不需要索引,要分类,我们就得手动去设置Field的熟悉了

 FieldType fieldType = new FieldType();
        fieldType.setIndexed(false);//set 是否索引
        fieldType.setStored(true);//set 是否存储
        fieldType.setTokenized(true);//set 是否分类
doc.add(new Field("fullpath", f.getCanonicalPath(), fieldType));     //索引完整路径


你可能感兴趣的:(lucene中Field简析)