lucene建立索引

建立索引.

1.lucene下载.

下载地址:http://archive.apache.org/dist/lucene/java/.
lucene不一样版本之间有不小的差异,这里下载的是lucene 4.3.java

2.导入jar包

打开eclipse,新建dynamic web project.解压下载的lucene压缩包,依次找到下面几个jar包,加到/WebContent/WEB-INF/lib目录下,而后Add to Build Path: git

包名 位置
lucene-analyzers-common-4.3.0.jar lucene-4.3.0/analysis/common
lucene-analyzers-smartcn-4.3.0.jar lucene-4.3.0/analysis/smartcn
lucene-core-4.3.0.jar lucene-4.3.0/core
lucene-highlighter-4.3.0.jar lucene-4.3.0/highlighter
lucene-queries-4.3.0.jar lucene-4.3.0/queries
lucene-queryparser-4.3.0.jar lucene-4.3.0/queryparser

3.建立索引

package ac.ucas.lucene;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class IndexCreate {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 建立标准分词器
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);
        // 建立indexwriter配置信息
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_43, analyzer);
        // 设置索引的打开方式
        indexWriterConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
        // 索引的存储路径
        Directory directory = null;
        // 索引的增删改由indexWriter建立
        IndexWriter indexWriter = null;

        try {
            directory = FSDirectory.open(new File("/Users/yaopan/Documents/eclipseworkspace/test"));
            if (indexWriter.isLocked(directory)) {//若indexWriter锁定则解锁
                indexWriter.unlock(directory);
            }

            //实例化indexWriter
            indexWriter = new IndexWriter(directory, indexWriterConfig);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Document doc1 = new Document();
        //添加三个域
        doc1.add(new StringField("id", "abcde", Store.YES));
        doc1.add(new TextField("content", "极客学院", Store.YES));
        doc1.add(new IntField("num", 1, Store.YES));

        // 写入索引
        try {
            indexWriter.addDocument(doc1);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Document doc2 = new Document();
        doc2.add(new StringField("id", "addff", Store.YES));
        doc2.add(new TextField("content", "LUCENE案例", Store.YES));
        doc2.add(new IntField("num", 2, Store.YES));

        // 写入索引
        try {
            indexWriter.addDocument(doc2);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

        try {
            indexWriter.commit();

            indexWriter.close();
            directory.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("index ceate complete!");
    }
}

4.lucene分词器

{%codeblock lang:java lucene分词器 %}github

package ac.ucas.lucene; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.cjk.CJKAnalyzer; import org.apache.lucene.analysis.core.KeywordAnalyzer; import org.apache.lucene.analysis.core.SimpleAnalyzer; import org.apache.lucene.analysis.core.StopAnalyzer; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.util.Version; import sun.dc.pr.PRError; public class AnalyerStudy { private static String str = "lucene, 全文检索框架"; public static void print(Analyzer analyzer){ StringReader stringReader=new StringReader(str); try { TokenStream tokenStream=analyzer.tokenStream(str, stringReader); tokenStream.reset(); CharTermAttribute term=tokenStream.getAttribute(CharTermAttribute.class); System.out.println("分词技术:"+analyzer.getClass()); while(tokenStream.incrementToken()){ System.out.print(term.toString()+" | "); } System.out.println("\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { Analyzer analyzer=null; //标准分词 analyzer=new StandardAnalyzer(Version.LUCENE_43); print(analyzer); //空格分词 analyzer =new WhitespaceAnalyzer(Version.LUCENE_43); print(analyzer); //简单分词 analyzer=new SimpleAnalyzer(Version.LUCENE_43); print(analyzer); //二分法 analyzer=new CJKAnalyzer(Version.LUCENE_43); print(analyzer); //关键字 analyzer=new KeywordAnalyzer(); print(analyzer); // analyzer=new StopAnalyzer(Version.LUCENE_43); print(analyzer); } } 

{% endcodeblock %}web

分词结果:
分词技术:class org.apache.lucene.analysis.standard.StandardAnalyzer
lucene | 全 | 文 | 检 | 索 | 框 | 架 |
分词技术:class org.apache.lucene.analysis.core.WhitespaceAnalyzer

lucene, | 全文检索框架 |
分词技术:class org.apache.lucene.analysis.core.SimpleAnalyzer
lucene | 全文检索框架 |
分词技术:class org.apache.lucene.analysis.cjk.CJKAnalyzer
lucene | 全文 | 文检 | 检索 | 索框 | 框架 |
分词技术:class org.apache.lucene.analysis.core.KeywordAnalyzer
lucene, 全文检索框架 |
分词技术:class org.apache.lucene.analysis.core.StopAnalyzer
lucene | 全文检索框架 |
apache

5. 使用luke打开索引

Luke是一个用于Lucene搜索引擎的,方便开发和诊断的第三方工具,它能够访问现有Lucene的索引.
luke下载地址:https://github.com/DmitryKey/luke/releasesmarkdown

相关文章
相关标签/搜索