lucene 中关于Store.YES 关于Store.NO的解释
总算搞明白 lucene 中关于Store.YES 关于Store.NO的解释了
一直对Lucene Store.YES不太理解,网上多数的说法是存储字段,NO为不存储。
这样的解释有点郁闷:字面意思一看就明白,但是不解。
之前我的理解是:如果字段可以不存储,那要怎么搜索这个不存储的字段呢?
原来Lucene就是这样,可以设置某些字段为不存储,但是可以用来检索。
终于在一篇文章里看到这几句话,突然间就明白了。
- //Store.YES 保存 可以查询 可以打印内容
- Field storeYes = new Field("storeyes","storeyes",Store.YES,Index.TOKENIZED);
- //Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间,但是这个索引是存在的,可以通过这个索引去检索
- Field storeNo = new Field("storeno","storeno",Store.NO,Index.TOKENIZED);
- //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的解释的更多相关文章
- SQL Server中TempDB管理(version store的逻辑结构)
原文:SQL Server中TempDB管理(version store的逻辑结构) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/arch ...
- 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 ...
- 【Lucene3.6.2入门系列】第03节_简述Lucene中常见的搜索功能
package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleD ...
- Lucene 中自定义排序的实现
使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们 ...
- lucene中的IndexWriter.setMaxFieldLength()
lucene中的IndexWriter.setMaxFieldLength() 老版本的Lucene中,IndexWriter的maxFieldLength是指一个索引中的最大的Field个数. 这个 ...
- 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析
通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...
- lucene中Field简析
http://blog.csdn.net/zhaoxiao2008/article/details/14180019 先看一段lucene3代码 Document doc = new Document ...
- lucene中TOKENIZED,UN_TOKENIZED 解釋
Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED)); 這些地方與舊版本有很大的區別 ...
- Lucene中的 Query对象
"Lucene中的 Query对象": 检 索前,需要对检索字符串进行分析,这是由queryparser来完成的.为了保证查询的正确性,最好用创建索引文件时同样的分析器. quer ...
随机推荐
- Gentoo解决Windows双系统时间不同步的问题
升级后的gentoo不再使用/etc/conf.d/clock,而是使用/etc/conf.d/hwclock来设置和时间相关了. 在/etc/conf.d/hwclock文件中设置系统时间为本地时间 ...
- 【TestDirector】常见问题分析
1.IE7无法访问TD 问题原因:兼容性问题 解决方法:步骤一.以系统管理员身份登陆TD: 步骤二.找到TD服务器中TDBIN目录(缺省情况下是C:\Inetpub\TDBIN目录),用编辑器打开st ...
- 酷比魔方 iwork10 旗舰版
平板电脑自带的win10的一键恢复不是一般的慢,简直慢出个性了,历经5个小时...必须是个有耐心的人才敢一键恢复,不然强制关机就变砖了...
- Quartz 2D中的基本图形绘制
在iOS中绘图一般分为以下几个步骤: 1.获取绘图上下文 2.创建并设置路径 3.将路径添加到上下文 4.设置上下文状态 5.绘制路径 6.释放路径 在UIKit中默认已经为我们准备好了一个图形上下文 ...
- php 分页类(2)
<?phpinclude("connection.php");$perNumber=10; //每页显示的记录数$page=$_GET['page']; //获得当前的页面值 ...
- bootstrap ch2清除浮动+12
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- py执行系统命令
1. os.system In [32]: run = os.system("date") Thu Jan 28 09:41:25 CST 2016 In [33]: run Ou ...
- 框架基础:ajax设计方案(一)---集成核心请求
报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉 ...
- undefine refrence to "*******"
windows mingw gcc 编译出现莫名的错误 wsaaddresstostringa, 理解起来,应该是link的时候,出现的问题 (在console的日志栏也能看出来) 然后,在ECL ...
- MC 跨周期 画线
using System; using System.Drawing; using PowerLanguage.Function; using System.Collections; namespac ...