Lucene 4.7 --创建索引

Lucene的最新版本和以前的语法或者类名,类规定都相差甚远

0.准备工作:

1). Lucene官方API http://lucene.apache.org/core/4_7_0/index.html

2). 我用到的常用JAR包下载:http://download.csdn.net/detail/yangxy81118/8062269

3). 所用到的jar包

lucene-analyzers-common-4.7.0.jar
lucene-analyzers-smartcn-4.7.0.jar
lucene-core-4.7.0.jar
lucene-queryparser-4.7.0.jar

本次先介绍关于创建索引

1. 总步骤

//a.从数据源准备索引数据
List<ResultVOFromDB> resultList = getKeyWords();
//b.创建IndexWriter
indexWriter = getIndexWriter();
//c.根据索引数据创建索引
addDoc(indexWriter, resultList);

a. 从数据源准备索引数据

这个就不用多说了,我这里通用了一个ResultVOFromDB这么一个数据来表示一个从数据源获取来的VO对象,比如你从数据库select来的数据,那肯定就是一个VO的List了

b. 创建IndexWriter

这里变化比较大,很多之前参考的语法都无法使用,或者被废弃,或者不推荐了

    private IndexWriter getIndexWriter() throws IOException {
        Directory dir = FSDirectory.open(new File(indexBuild));
        //Version操作开始变得非常常见
        //中文分词器的引入,好像4.7.0对庖丁等第三方分词器兼容得并不好,可能也是因为apache对原生的做了一些整合的缘故
        Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_47);
        //同时引入了IndexWriterConfig对象,封装了早期版本的一大堆参数
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_47, analyzer);
        IndexWriter writer = new IndexWriter(dir, config);
        return writer;
    }

c. 根据索引数据创建索引

  4.7.0 对Field做了更进一步的封装,官方DEMO推荐已经不再是原来的new Field然后传参了,(虽然语法还存在,但是有些已经被废弃了)具体可以参考org.apache.lucene.document包下的相关Field的类

举例,如StringField: http://lucene.apache.org/core/4_7_0/core/org/apache/lucene/document/StringField.html

A field that is indexed butnot tokenized: the entire String value is indexed as a single token. For example this might be used for a‘country‘field or an‘id‘ field, or any field that you intend to use for sorting or access through the field cache.

这段英文应该不难吧,StringField就是可以被参与索引的(is indexed),但是并不做分词操作(not tokenized),适合做id或者国家名这种“要么不对,要么整个都对”

然后我下面还用到了StoredField(只存不索引),TextField(索引并分词)

private void addDoc(IndexWriter indexWriter, List<ResultVOFromDB> resultList) throws IOException {
        for (ResultVOFromDB vo : resultList) {
            Document doc = createDoc(vo);
            indexWriter.addDocument(doc);
        }
    }

private Document createDoc(ResultVOFromDB vo) throws UnsupportedEncodingException {
        Document doc = new Document();
//就像有某个商品,查询结果列表要展示商品的名称,ID,和跳转链接地址,所以从数据库取出name,id,url字段
        doc.add(new StringField("name", vo.name, Field.Store.YES));
        doc.add(new StringField("id", vo.id, Field.Store.YES));
        doc.add(new StoredField("url", vo.url));

//这个keywords就像博客文章的自定义“关键字”,这些字有多个,而且都会做用到索引并且接受分词操作的,“css学习”会被拆分为“css”和“学习”
        String[] keys = vo.keywords;
        for (int i = 0; i < keys.length; i++) {
            doc.add(new TextField("keyword", keys[i],Field.Store.YES));
        }

        return doc;
    }
时间: 2024-10-09 17:37:02

Lucene 4.7 --创建索引的相关文章

Lucene.net 从创建索引到搜索的代码范例

关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB中加载.Field.Store.YES:存储字段值(未分词前的字段值)Field.Store.NO:不存储,存储与索引没有关系Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损Field.Index.ANALYZED:分词建索引 Field.Index.ANALYZE

Lucene教程(一) 创建索引初步

简述: 本教程为系列教程,最近在看Lucene的一个视频教程,感觉不错,可惜的是所讲的版本为3.5,由于Lucene不同的版本差距较大,因此当即决定写一个新版本的系列教程5.0版本,但是又怕从3.5跨到5.0跨度太大,毕竟自己也没有使用过Lucene,因此再插入一个中间版本4.5,所以,此系列教程打算把3.5版本,4.5版本,5.0版本都给出个例子,方便大家学习,也方便自己复习. 注:3.5版本并非原创,如下步骤的思路并非原创,都是我在视频教程上学到的,其他均为原创,以后跟进的教程也是如此 注:

Lucene学习:创建索引

1.1. 创建索引 示例: 1 import org.apache.lucene.analysis.Analyzer; 2 3 import org.apache.lucene.analysis.TokenStream; 4 5 import org.apache.lucene.analysis.core.WhitespaceAnalyzer; 6 7 import org.apache.lucene.analysis.standard.StandardAnalyzer; 8 9 import

全文检索之lucene的优化篇--创建索引库

在上一篇HelloWorld的基础上,建立一个directory的包,添加一个DirectoryTest的测试类,用来根据指定的索引目录创建目录存放指引. DirectoryTest类中的代码如下,基本上就是在HelloWorld的基础上改改就可以了. 里面一共三个方法,testDirectory(),测试创建索引库;testDirectoryFSAndRAM(),结合方法1的两种创建方式,优化;testDirectoryOptimize(),在方法2个基础上,研究索引的优化创建,减少创建的索引

使用Lucene对预处理后的文档进行创建索引(可执行)

时间: 2015/3/18 杨鑫newlife 对于文档的预处理后.就要開始使用Lucene来处理相关的内容了. 这里使用的Lucene的过程例如以下: 首先要为处理对象机那里索引 二是构建查询对象 三是在索引中查找 这里的代码是处理创建索引的部分 代码: package ch2.lucenedemo.process; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import jav

lucene创建索引以及索引文件合并

1 package test; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.nio.file.Path; 6 import java.util.ArrayList; 7 import java.util.List; 8 import java.util.Map; 9 10 import org.apache.lucene.analysis.standard.StandardAnalyzer; 11 im

lucene学习-创建索引

本文的lucene是基于lucene3.5版本. 使用lucene实现搜索引擎开发,核心的部分是建立索引和搜索.本节主要是记录创建索引部分的内容. 创建的索引结构如图所示. 创建索引的步骤分为以下几个步骤: 1.建立索引器IndexWriter 2.创建文档对象Document 3.建立信息对象字段Field 4.将Field对象添加到Document 5.将Document对象添加到IndexWriter对象中 下面简要介绍几个核心对象. (1).创建IndexWriter对象. IndexW

lucene创建索引

1.导入jar包 2.创建实体Bean package com.zhishang.lucene; /**  * Created by Administrator on 2017/7/8.  */ public class HtmlBean {     private String title;     private String content;     private String url;     public void setTitle(String title) {         t

lucene创建索引的几种方式(一)

什么是索引: 根据你输入的值去找,这个值就是索引 第一种创建索引的方式: 根据文件来生成索引,如后缀为.txt等的文件 步骤: 第一步:FSDirectory.open(Paths.get(url));根据路径获取存储索引的目录. FSDirectory:表示对文件系统目录的操作.RAMDirectory :内存中的目录操作. Paths为NIO(new io)的一个类:Path 类是 java.io.File 类的升级版,File file=newFile("index.html")