`

[转]lucene中Field.Index,Field.Store详解

阅读更多

 

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:存储偏移量

转自:http://my.oschina.net/u/2532228/blog/534578

分享到:
评论

相关推荐

    lucene对doc.xlsx操作包

    import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.Directory; //... 初始化Directory和IndexWriter try (InputStream is = new FileInputStream("path_to_your_file.docx")) { ...

    lucene基本使用,适合初学者

    doc2.add(new Field("title", "用于索引第2个标题", Field.Store.YES, Field.Index.ANALYZED)); doc2.add(new Field("content", "建立索引内容", Field.Store.YES, Field.Index.ANALYZED)); // 添加文档至索引 ...

    Lucene索引器实例

    doc.add(new Field("title", "Lucene索引器实例", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是关于Lucene索引器的一个实例教程。", Field.Store.YES, Field.Index.ANALYZED)); ...

    第一个lucene程序

    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....

    lucene最新版本3.3的基本功能用法(IK分词是3.2.8)

    doc.add(new Field("content", "文章内容", Field.Store.YES, Field.Index.ANALYZED)); indexWriter.addDocument(doc); indexWriter.close(); ``` 2. 执行搜索:创建IndexReader和IndexSearcher,使用QueryParser...

    Lucene操作数据库借鉴.pdf

    - 将数据库记录的字段映射到`Document`的`Field`对象中,如`Field.Store.YES`表示存储该字段,`Field.Index.UN_TOKENIZED`表示该字段不进行分词处理。 - 将每个`Document`添加到`IndexWriter`中,以创建索引。 2....

    springboot-lucene.zip

    《SpringBoot整合Lucene实战详解》 在现代的Web开发中,SpringBoot因其简洁的配置、快速的开发体验以及强大的生态系统,已经成为Java开发者首选的框架之一。而Lucene,作为Apache软件基金会的一个开源项目,是Java...

    Lucence创建索引

    Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector) ``` - **内部类解释**: - **Field.Index**: - **TOKENIZED**:进行分词索引。 - **UN_TOKENIZED**...

    lucene手册

    Field field2 = new Field("ArticleText", "这是一届创造奇迹、超越梦想的奥运会.", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field1); doc1.add(field2); writer2.addDocument(doc1); ``` 这段...

    全文检索原理及Lucene实之搜索

    Field field1 = new Field("title", "企业门户", Field.Store.YES, Field.Index.ANALYZED); doc1.add(field1); // 添加更多字段 Field contentField = new Field("content", "这是一段关于企业门户的文章。", ...

    Hibernate 与 Lucene 的整合框架详解

    ### Hibernate 与 Lucene 的整合框架详解 #### 一、概述 在软件开发领域,特别是企业级应用开发中,高效的数据检索与管理是至关重要的。Hibernate 和 Lucene 分别作为对象关系映射(ORM)工具和全文搜索引擎,在...

    lucene基础介绍

    doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 添加路径字段 writer.addDocument(doc); // 将文档添加到索引中 ``` - 对于多个文件建立索引: ```java ...

    Lucene 使用正则表达式

    Field f1 = new Field("url", "http://www.abc.com/product?typeid=1&category=10&item=34", Field.Store.YES, Field.Index.TOKENIZED); // 同上... ``` 创建了三个文档,每个文档包含一个`Field`对象,用于存储...

    一个例子学懂搜索引擎(lucene)

    Field field2 = new Field("ArticleText", "这是一届创造奇迹、超越梦想的奥运会.", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field1); doc1.add(field2); ``` 这里需要注意的是,`Field.Store.YES`...

    用Lucene检索数据库

    - 每个字段(如Au_name)对应于`Document`中的`Field`,如`doc.add(new Field("NAME", "USERNAME", Field.Store.YES, Field.Index.UN_TOKENIZED))`。 - `Field.Store.YES`表示存储该字段的值,`Field.Index.UN_...

    【ASP.NET编程知识】详解Spring Boot 中使用 Java API 调用 lucene.docx

    Spring Boot 中使用 Java API 调用 Lucene 实现全文检索 Lucene 是 Apache 软件基金会下的一个子项目,是一个开放源代码的全文检索引擎工具包。它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了...

    Linux源码剖析

    - **`org.apache.lucene.store.IndexInput`** 和 **`org.apache.lucene.store.IndexOutput`**:用于读取和写入索引文件的接口。 ### 文档内容是如何分析的 #### 文档分析类 `Analyzer` - **`org.apache.lucene....

    lucene学习笔记

    doc.Add(new Field("content", "这是一个测试文档", Field.Store.YES, Field.Index.ANALYZED)); writer.AddDocument(doc); writer.Close(); } // 执行搜索 public void SearchIndex() { Directory dir = ...

Global site tag (gtag.js) - Google Analytics