lucene建立索引

一、須要添加的依賴java

 <!-- Lucene core -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>7.2.1</version>
        </dependency>
        <!-- Lucene解析庫 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>7.2.1</version>
        </dependency>
        <!-- Lucene附加的分析庫 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>7.2.1</version>
        </dependency>
        <!-- 索引分詞,能夠選用其餘分詞器 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-smartcn</artifactId>
            <version>7.2.1</version>
        </dependency>

二、索引建立及測試apache

package com.zxf.lucene.util;

import com.zxf.lucene.analyzer.lucene.IKAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;

/**
 * Created by jiangyang on 2019/3/8.
 */
public class LuceneDemo {


    /**索架索引*/
    public Document createDocument(){
        /*
            0.Field.Store.NO 查詢出document時,經過document.get(key)沒法獲取值,設置爲NO時只能進行索引查詢
            1.使用new TextField("字段名稱","字段值"),採用TextField會將其字段值進行分詞;
                new TextField("name" ,"張三", Field.Store.NO)
               若是不須要分詞的字符串能夠採用 new StringField(key,value)形式,若是不分詞對於value字段值有長度限制,超出則報異常
            2. NumericDocValuesField:數值型,不會進行分詞
               document.add(new NumericDocValuesField("mynumber", 1234));
               //至關於Field.Store.YES
               document.add(new StoredField("mynumber", 1234));
            3.
         */
        Document document = new Document();
        document.add(new TextField("name" ,"張三", Field.Store.NO));
        document.add(new NumericDocValuesField("id", 1234));
        document.add(new StoredField("id", 1234));
        document.add(new StringField("nickname", "冷太陽",Field.Store.YES));
        return document;
    }

    /**
     * @param dir 存放索引文件的 文件存放路徑
     * @return
     */
    public  IndexWriter getIndexWriterInstance(String dir) {
        File file = new File(dir);
        if (!file.exists()) {
            file.mkdirs();
        }
        try{
            Directory directory = FSDirectory.open(Paths.get(dir));
            IKAnalyzer ikAnalyzer = new IKAnalyzer();
            //設置相應的分詞器
            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(ikAnalyzer);
            return new IndexWriter(directory, indexWriterConfig);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 測試
     * @param args
     */
    public static void main(String[] args) {
        LuceneDemo demo = new LuceneDemo();
        String dir = "索引文件夾的路徑";
        IndexWriter indexWriter = demo.getIndexWriterInstance(dir);
        Document document = demo.createDocument();
        try {
            //添加索引
            indexWriter.addDocument(document);
            indexWriter.commit();
            indexWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
相關文章
相關標籤/搜索