Lucene 索引(index),document,field
document ----- 一行记录
field ----------- 一个字段
index----------- 一张表
package com.lucene;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/**
* 相当于表结构的 一条记录
* 一个document可以和一个物理文件对应起来
* 一个document也可以从不同物理文件提取数据源
* document甚至不使用物理文件来构建一个document 一段字符串,链接,都可以作为数据源
*/
Document bookdoc=new Document();
/**
* Field 数据源, 相当于一条表结构的一个字段数据
* 有3个重要属性:
* 是否存储:是否把内容存放在索引中,如果查询结果不需要显示,就不需要存储
* 是否索引:是否需要搜索的意思,一般来说 要分词 就必须索引,要索引就不一定要分词
* 是否分词:是否需要 按照 某个设定的分词器来进行分词搜索。
* Field 有2个内部类
* 1 Store : 表示Field 的存储属性(静态属性)
* 1.1 COMORESS 压缩存储
* 1.2 YES 存储
* 1.3 NO 不存储
* 2 Index : 表示Field 的索引属性(静态属性)
* 2.1 NO 不索引:
* 2.2 TOKENZED 被分词后索引
* 2.3 UN_TOKENZED 不分词索引
* 2.4 NO_NORMS 不使用Analyzer来索引Field
*/
//存储且分词索引
Field bookname=new Field("bookname","Java编程思想",Field.Store.YES,Field.Index.TOKENIZED);
//存储不分词索引
Field author=new Field("author","wwwlike",Field.Store.YES,Field.Index.UN_TOKENIZED);
//不存储,分词索引
Field bookabstract=new Field("bookabstract","java是一门编程语言,已经有10多年的发展历史了",Field.Store.NO,Field.Index.TOKENIZED);
//把所有的field加入到Document中
bookdoc.add(bookname);
bookdoc.add(bookabstract);
bookdoc.add(author);
/**
* IndexWriter 主要作用是对缩影进行创建,添加Document,合并何种索引段,以及控制索引相关的方方面面。它
* 是Lucene的索引的主要操作者。3个构造函数:
* public IndexWriter(String path,Analyzer a,boolean create)
* public IndexWriter(File path,Analyzer a,boolean create)
* public IndexWriter(Directory d,Analyzer a,boolean create)
* 其中第3个参数是说:是否在第一个参数指定的路径下重新建立索引
*/
try
{
//注意文件夹路径的标识方式
IndexWriter writer=new IndexWriter("d:\\aaa", new StandardAnalyzer(), true);
//向索引添加文档
writer.addDocument(bookdoc);
//优化
writer.optimize();
//一定要close 关闭索引器 关闭各种流才能最终完成索引的建立
writer.close();
}catch (Exception e) {
e.printStackTrace();
}
//writer.setMaxFieldLength(int maxFieldLength) 设置最大存放field的数量 默认10000
}
}
分享到:
相关推荐
这个示例中的"day0217"可能是指课程或项目的编号,表示该示例代码是学习过程中的第二天第17个主题。通过这些代码,我们可以学习到Lucene的核心概念,包括索引构建、分词分析和查询执行,这对于理解全文检索系统的...
在这个"lucene第一天"的入门实例中,你可能会学到如何创建和管理Lucene的索引,包括: - **创建索引**:这通常涉及读取源数据(如文件或数据库),将它们转换为Lucene的Document对象,然后将这些Document添加到...
(https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)):官方文档覆盖了Elasticsearch的所有方面,是学习和解决问题的第一手资料。 2. **Elastic官方教程**(...
│ 淘淘商城第一天笔记.docx │ ├─02.第二天 │ 07.商品类目选择完成.avi │ 01.课程计划.avi │ 02.展示首页.avi │ 03.分页插件01.avi │ 04.分页插件的使用方法.avi │ 05.商品列表展示.avi │ 06.商品类目...
更复杂的聚合如桶(bucket)聚合可用于按类别分组数据,如按时间分桶查看一天内的访问量。 7. **分布式特性** Elasticsearch 的分布式特性使得它能够轻松处理大量数据。数据自动分布在多个节点上,通过分片(shard...