Luence 4.4 Jcseg分词器构建索引以及检索测试

一 利用Jcseg分词器构建索引

public class LuceneJcsegIndex {
public static void main(String[] args) {
String[] ids = new String[] { "1", "2", "3", "4" };
String[] names = new String[] { "北京", "北京海淀", "南京", "shanghai" };
String[] values = new String[] { "lang", "deg", "men", "context" };
String[] bir = new String[] { "198108", "197906", "191111", "198710" };
try {
String dir = "D:\\user";
// 目录
Directory directory = new SimpleFSDirectory(new File(dir));

Analyzer analyzer =  new JcsegAnalyzer4X(JcsegTaskConfig.COMPLEX_MODE);
JcsegAnalyzer4X jcseg = (JcsegAnalyzer4X) analyzer;
JcsegTaskConfig jcsegTaskConfig = jcseg.getTaskConfig();
jcsegTaskConfig.setAppendCJKPinyin(true);
jcsegTaskConfig.setAppendCJKSyn(true);
IndexWriter indexWriter = new IndexWriter(directory,
new IndexWriterConfig(Version.LUCENE_44, analyzer));
for (int i = 0; i < ids.length; i++) {
Document document = new Document();
document.add(new IntField("id", Integer.parseInt(ids[i]),
Store.YES));
document.add(new StringField("name", names[i], Store.YES));
document.add(new TextField("text", values[i], Store.YES));
document.add(new StringField("datetime", bir[i], Store.YES));
indexWriter.addDocument(document);
}
indexWriter.commit();
indexWriter.close();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


二 根据名称查询

Term term = new Term("name", "北京");

查询结果:

北京
lang
198108

三 测试QueryParse

package com.zsj.test;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.webssky.jcseg.core.JcsegTaskConfig;
import com.webssky.jcseg.lucene.JcsegAnalyzer4X;

/**
 * 测试Lucene 4.4简单搜索
 * 
 * @author hadoop
 * 
 */
public class LuceneJcsegQueryParse {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String dir = "D:\\user";

		try {
			Directory directory = FSDirectory.open(new File(dir));
			@SuppressWarnings("deprecation")
			IndexReader reader = IndexReader.open(directory);
			IndexSearcher indexSearcher = new IndexSearcher(reader);
			/**
			 * 创建搜索字段
			 */
			Analyzer analyzer = new JcsegAnalyzer4X(
					JcsegTaskConfig.COMPLEX_MODE);
			JcsegAnalyzer4X jcseg = (JcsegAnalyzer4X) analyzer;
			JcsegTaskConfig jcsegTaskConfig = jcseg.getTaskConfig();
			jcsegTaskConfig.setAppendCJKPinyin(true);
			jcsegTaskConfig.setAppendCJKSyn(true);
			QueryParser queryParser = new QueryParser(Version.LUCENE_44,
					"name", analyzer);
			//Test AND NOT
			Query query = queryParser.parse("text:men AND NOT name:南京");
			
			//Test AND
			//Query query = queryParser.parse("text:men AND name:南京");
			// Term term = new Term("name", "北京");
			// TermQuery termQuery = new TermQuery(term);
			
			TopDocs topDocs = indexSearcher.search(query, 4);
			ScoreDoc scoreDocs[] = topDocs.scoreDocs;
			for (int i = 0; i < scoreDocs.length; i++) {
				Document document = indexSearcher.doc(scoreDocs[i].doc);
				System.out.println(document.get("id"));
				System.out.println(document.get("name"));
				System.out.println(document.get("text"));
				System.out.println(document.get("datetime"));
			}
			directory.close();

		} catch (IOException | ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值