Lucene索引升级 - rainystars' Blog - SegmentFault

标签: lucene 索引 升级 | 发表时间:2017-10-22 11:19 | 作者:
出处:https://segmentfault.com

由于Lucene文件格式从2到3以及从3到4版本时都发生了重大的改变,造成了高版本无法读取低版本的数据,使用Lucene中的IndexUpgrader方法先将版本从2升到3,然后再从3升级到4。

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexUpgrader;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;


public class ConvertFromTwo {

    public static void main(String[] args) {
        ConvertFromTwo c = new ConvertFromTwo();
        c.upgrade();        
    }
    private final String INDEX_PATH = "C:/Users/rainystars/Desktop/index-synonym";  
    public void upgrade(){
        try {
            File dir = new File(INDEX_PATH);
            String path = "";
            String[] dirList = dir.list();
            for (String d:dirList){
                path = INDEX_PATH + "/" + d;
                IndexUpgrader t = new IndexUpgrader(FSDirectory.open(new File(path)),
        Version.LUCENE_36,null,true);
                t.upgrade();
                System.out.println(path+" Done.");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("All Done.");
    }
}

从版本2升级到版本3时,需要使用lucene3的jar包,我使用的lucene3.6的jar包,我需要处理的索引是在一个文件夹中所存在的一系列索引文件,所以需要循环来遍历每个目录。

import java.io.File;
import java.io.IOException;

import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexUpgrader;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class ConvertFromThree {

    public static void main(String[] args) {
        ConvertFromThree c = new ConvertFromThree();
        c.upgrade();        
    }
    private final String INDEX_PATH = "C:/Users/rainystars/Desktop/index-synonym";  
    public void upgrade(){
        try {
            File dir = new File(INDEX_PATH);
            String path = "";
            String[] dirList = dir.list();
            for (String d:dirList){
                path = INDEX_PATH + "/" + d;
                //System.out.println(path);
                IndexUpgrader t = new IndexUpgrader(FSDirectory.open(new File(path)),
                                                        Version.LUCENE_44,System.out,true);
                t.upgrade();
                System.out.println(path+" Done.");
            }       
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("All Done.");
    }
}

在3到4版本的转化中使用的是lucene4.4的jar包

相关 [lucene 索引 升级] 推荐:

Lucene索引升级 - rainystars' Blog - SegmentFault

- -
由于Lucene文件格式从2到3以及从3到4版本时都发生了重大的改变,造成了高版本无法读取低版本的数据,使用Lucene中的IndexUpgrader方法先将版本从2升到3,然后再从3升级到4. 从版本2升级到版本3时,需要使用lucene3的jar包,我使用的lucene3.6的jar包,我需要处理的索引是在一个文件夹中所存在的一系列索引文件,所以需要循环来遍历每个目录.

有关Lucene的问题(7):用Lucene构建实时的索引

- -
由于前一章所述的Lucene的事务性,使得Lucene可以增量的添加一个段,我们知道,倒排索引是有一定的格式的,而这个格式一旦写入是非常难以改变的,那么如何能够增量建索引呢. Lucene使用段这个概念解决了这个问题,对于每个已经生成的段,其倒排索引结构不会再改变,而增量添加的文档添加到新的段中,段之间在一定的时刻进行合并,从而形成新的倒排索引结构.

lucene索引创建的理解思路

- - ITeye博客
虽然lucene4很早就出来,但是这里仍然以lucene3.0为基础,理解lucene索引创建的思路:. field的数据,fdx,fdt,依次写每个field的即可. 词向量,tvx,tvd,tvf. tvf是真正存储的地方,tvx是每个文档一项,具体包含第一个field的位置,其他field只要记录与覅一个field的偏移量即可.

[原]Lucene系列-索引文件

- - 文武天下
本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息. 基于Lucene 4.10.0. 索引(index)包含了存储的文档(document)正排、倒排信息,用于文本搜索. 索引又分为多个段(segments),每个新添加的doc都会存到一个新segment中,不同的segments又会合并成一个segment.

减小lucene索引体积大小

- - sling2007的博客
下文讲述了lucene中,如何优化索引,减小索引体积. 如果需要被搜索的数值类型,需要设置合适的precisionstep. 如果不需要搜索,只要排序即可,那么设置precisionstep为Integer.Max即可. 使用geohash算法,给每个区域编码,把编码切成term并索引,然后用于搜索.

[原]基于Lucene多索引进行索引和搜索

- - 千与的专栏
Lucene支持创建多个索引目录,同时存储多个索引. 我们可能担心的问题是,在索引的过程中,分散地存储到多个索引目录中,是否在搜索时能够得到全局的相关度计算得分,其实Lucene的ParallelMultiSearcher和MultiSearcher支持全局得分的计算,也就是说,虽然索引分布在多个索引目录中,在搜索的时候还会将全部的索引数据聚合在一起进行查询匹配和得分计算.

Lucene 4.0 的重大升级内容一览

- Frank Cai - 我要去桂林---田春峰的网志
Lucene 4.0 的重大升级内容一览. 新浪微博上阿朱(博客 ,微博)提示让我说说Lucene 4.0 的特点. 最近也在做搜索相关的项目,一直关注Lucene 3.x 之后下一步的发展方向. 我就把我了解到的Lucene 4.0的一些资料和大家分享一下. 大家都知道Lucene的作者是Doug Cutting ,这位博士毕业生因为工作不稳定,想学java,当他准备写个项目练练手的时候,也许他没想到这个以他外祖母的姓Lucene 命名的搜索引擎软件包会在此后的让他声名鹊起,并成为了中小型搜索引擎绝对主流的选择.

LIRE(Lucene Image Retrieval)相似图像索引和搜索机制

- - CSDN博客云计算推荐文章
众说周知,lucene是一个开源的强大的索引工具,但是它仅限于文本索引. 基于内容的图像检索(CBIR)要求我们利用图像的一些基本特征(如颜色纹理形状以及sift,surf等等)搜索相似的图片,LIRE(Lucene Image Retrieval)是一款基于lucene的图像特征索引工具,它能帮助我们方便的对图像特征建立索引和搜索,作者也在不断加入新的特征供用户使用.

开源搜索引擎评估:lucene sphinx elasticsearch

- - 鲁塔弗的博客
lucene系,java开发,包括 solr和 elasticsearch. sphinx,c++开发,简单高性能. 搜索引擎程序这个名称不妥当,严格说来应该叫做 索引程序(indexing program),早期主要用来做中文全文搜索,但是随着互联网的深入普及,各家网站规模越来越大,索引程序在 优化网站架构上发挥了更大的作用: 替代mysql数据库 内置的索引.

用Lucene构建实时索引的文档更新问题

- - 开源软件 - ITeye博客
1、Lucene删除文档的几种方式. IndexReader.deleteDocument(int docID)是用 IndexReader 按文档号删除. IndexReader.deleteDocuments(Term  term)是用 IndexReader 删除包含此词(Term)的文档. IndexWriter.deleteDocuments(Term  term)是用 IndexWriter 删除包含此词(Term)的文档.