转自:http://www.pusuo.net/2010-02-14/111095034.html
lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED));
Field有两个属性可选:存储和索引。
通过存储属性你可以控制是否对这个Field进行存储;
通过索引属性你可以控制是否对该Field进行索引。
事实上对这两个属性的正确组合很重要。
Field.Index
Field.Store
说明
TOKENIZED(分词) |
YES |
被分词索引且存储 |
TOKENIZED |
NO |
被分词索引但不存储 |
NO |
YES |
这是不能被搜索的,它只是被搜索内容的附属物。如URL等 |
UN_TOKENIZED |
YES/NO |
不被分词,它作为一个整体被搜索,搜一部分是搜不出来的 |
NO |
NO |
没有这种用法 |
我们那文章表为例.articleinfo.有ID,title(标题),sumary(摘要),content(内容),userName(用户名)
其中title(标题),sumary(摘要)属于第一种情况,既要索引也要分词,也要存储.
content(内容)要分词,索引,但不存储.由于他太大了,而且界面也不用显示整个内容.
ID要存储,不用索引.因为没人用他来查询.但拼URL却很需要他.索引要存储.
userName(用户名)索引,但不分词.可用保存.为什么不分词?比如"成吉思汗",我不想被"成汉"搜索到.我希望要么"成吉思汗"或者"*吉思*"通配符搜到.
总结如下:
1.如果要对某Field进行查找,那么一定要把Field.Index设置为TOKENIZED或UN_TOKENIZED。TOKENIZED会对Field的内容进行分词;而UN_TOKENIZED不会,只有全词匹配,该Field才会被选中。
2.如果Field.Store是No,那么就无法在搜索结果中从索引数据直接提取该域的值,会使null。
补充:
Field.Store.YES:存储字段值(未分词前的字段值)
Field.Store.NO:不存储,存储与索引没有关系
Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损
Field.Index.ANALYZED:分词建索引
Field.Index.ANALYZED_NO_NORMS:分词建索引,但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
Field.Index.NOT_ANALYZED:不分词且索引
Field.Index.NOT_ANALYZED_NO_NORMS:不分词建索引,Field的值去一个byte保存
TermVector表示文档的条目(由一个Document和Field定位)和它们在当前文档中所出现的次数
Field.TermVector.YES:为每个文档(Document)存储该字段的TermVector
Field.TermVector.NO:不存储TermVector
Field.TermVector.WITH_POSITIONS:存储位置
Field.TermVector.WITH_OFFSETS:存储偏移量
Field.TermVector.WITH_POSITIONS_OFFSETS:存储位置和偏移量
分享到:
相关推荐
import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.Directory; //... 初始化Directory和IndexWriter try (InputStream is = new FileInputStream("path_to_your_file.docx")) { ...
doc2.add(new Field("title", "用于索引第2个标题", Field.Store.YES, Field.Index.ANALYZED)); doc2.add(new Field("content", "建立索引内容", Field.Store.YES, Field.Index.ANALYZED)); // 添加文档至索引 ...
doc.add(new Field("title", "Lucene索引器实例", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是关于Lucene索引器的一个实例教程。", Field.Store.YES, Field.Index.ANALYZED)); ...
import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org....
doc.add(new Field("title", "Lucene介绍", Field.Store.YES, Field.Index.ANALYZED)); // 添加正文字段 doc.add(new Field("content", "Lucene是一个高性能的全文检索库。", Field.Store.YES, Field.Index....
doc.add(new Field("content", "文章内容", Field.Store.YES, Field.Index.ANALYZED)); indexWriter.addDocument(doc); indexWriter.close(); ``` 2. 执行搜索:创建IndexReader和IndexSearcher,使用QueryParser...
- 将数据库记录的字段映射到`Document`的`Field`对象中,如`Field.Store.YES`表示存储该字段,`Field.Index.UN_TOKENIZED`表示该字段不进行分词处理。 - 将每个`Document`添加到`IndexWriter`中,以创建索引。 2....
《SpringBoot整合Lucene实战详解》 在现代的Web开发中,SpringBoot因其简洁的配置、快速的开发体验以及强大的生态系统,已经成为Java开发者首选的框架之一。而Lucene,作为Apache软件基金会的一个开源项目,是Java...
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector) ``` - **内部类解释**: - **Field.Index**: - **TOKENIZED**:进行分词索引。 - **UN_TOKENIZED**...
Field field2 = new Field("ArticleText", "这是一届创造奇迹、超越梦想的奥运会.", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field1); doc1.add(field2); writer2.addDocument(doc1); ``` 这段...
Field field1 = new Field("title", "企业门户", Field.Store.YES, Field.Index.ANALYZED); doc1.add(field1); // 添加更多字段 Field contentField = new Field("content", "这是一段关于企业门户的文章。", ...
doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 添加路径字段 writer.addDocument(doc); // 将文档添加到索引中 ``` - 对于多个文件建立索引: ```java ...
### Hibernate 与 Lucene 的整合框架详解 #### 一、概述 在软件开发领域,特别是企业级应用开发中,高效的数据检索与管理是至关重要的。Hibernate 和 Lucene 分别作为对象关系映射(ORM)工具和全文搜索引擎,在...
Field field2 = new Field("ArticleText", "这是一届创造奇迹、超越梦想的奥运会.", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field1); doc1.add(field2); ``` 这里需要注意的是,`Field.Store.YES`...
- **`org.apache.lucene.store.IndexInput`** 和 **`org.apache.lucene.store.IndexOutput`**:用于读取和写入索引文件的接口。 ### 文档内容是如何分析的 #### 文档分析类 `Analyzer` - **`org.apache.lucene....
Field f1 = new Field("url", "http://www.abc.com/product?typeid=1&category=10&item=34", Field.Store.YES, Field.Index.TOKENIZED); // 同上... ``` 创建了三个文档,每个文档包含一个`Field`对象,用于存储...
Spring Boot 中使用 Java API 调用 Lucene 实现全文检索 Lucene 是 Apache 软件基金会下的一个子项目,是一个开放源代码的全文检索引擎工具包。它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了...