Lucene4:运用中文分词器创建索引,给指定文本增加boost值

1. 要求

环境:

Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本

功能:
  1). 运行中文分词器进行创建索引工作;
  2). 对文本中包括某些关键词的,增加此字段的boost值。

2. 实现代码

package com.clzhang.sample.lucene;

import java.io.*;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
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;

//import org.wltea.analyzer.lucene.IKAnalyzer;
import com.chenlb.mmseg4j.Dictionary;
import com.chenlb.mmseg4j.analysis.ComplexAnalyzer;

import org.junit.Test;

/**
 * 环境:Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本
 * 功能:
 * 1.运行中文分词器进行创建索引工作;
 * 2.对文本中包括某些关键词的,增加此字段的boost值。
 * @author Administrator
 *
 */
public class IndexDemo {
    // mmseg4j字典路径
    private static final String MMSEG4J_DICT_PATH = "C:\\solr\\news\\conf";
    private static Dictionary dictionary = Dictionary.getInstance(MMSEG4J_DICT_PATH);
    
    // Lucene索引存放路径 
    private static final String LUCENE_INDEX_DIR = "C:\\lucene\\data";
    
    @Test
    public void doIndex() throws Exception {
        // 需要建立索引的内容
        String[] title = new String[] { 
                "上海公务员抛售豪宅", 
                "广州打空姐区政委", 
                "载8名船员中国渔船疑违规",
                "浙江5人疑坐冤狱17年续", 
                "王岐山:拉长耳朵瞪大眼睛" 
        };
        String[] content = new String[] {
                "这是近两个月以来,上海公务员抛售豪宅的缩影。",
                "昨天,记者相继连线广州市越秀区宣传部",
                "一艘中国渔船24日下午疑因在长崎县附近日本专属经济水域内违规作业",
                "1995年3月20日和8月12日,在浙江萧山发生两起抢劫出租车司机事件",
                "王岐山说,今天开会的会议室是党的十一届三中全会召开的地方" 
        };

        // 实例化IKAnalyzer分词器
//        Analyzer analyzer = new IKAnalyzer();
        
        // 实例化mmseg4j分词器,可以设置为另两种分词器
        Analyzer analyzer = new ComplexAnalyzer(dictionary);

        // 建立索引对象
        Directory directory = FSDirectory.open(new File(LUCENE_INDEX_DIR));
        
        // 配置IndexWriterConfig
        IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_41,
                analyzer);
        iwConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
        IndexWriter writer = new IndexWriter(directory, iwConfig);

        // 写入索引
        for (int i = 0; i < title.length; i++) {
            Document doc = new Document();
            doc.add(new TextField("id", "" + i, Field.Store.YES));
            
            // 加入title与content,包含权重
            TextField textField = new TextField("title", title[i], Field.Store.YES);
            textField.setBoost(AnalyzerTool.getBoost(title[i]));
            doc.add(textField);
            textField = new TextField("content", content[i], Field.Store.YES);
            textField.setBoost(AnalyzerTool.getBoost(content[i]));
            doc.add(textField);
            
            // 拷贝字段,真正查询只对此字段进行查询即可
            doc.add(new TextField("text", title[i], Field.Store.NO));
            doc.add(new TextField("text", content[i], Field.Store.NO));
            
            writer.addDocument(doc);
        }
        writer.forceMerge(1);
        writer.close();
        
        System.out.println("索引建立成功!");
    }
}

文章中引用的AnalyzerTool类代码参考:Lucene4.1:获取中文分词结果,根据文本计算boost

输出:

加载扩展词典:C:/solr/news/conf/words-my.dic
......
加载扩展停止词典:stopword.dic
索引建立成功!

你可能感兴趣的:(Lucene)