以下文章主要介绍的是如何进行Lucene进行中文分词和全文搜索
package com.sf.module.extension.lucene;
import java.io.File;
import java.io.Serializable;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.LimitTokenCountAnalyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.LogMergePolicy;
import org.apache.lucene.index.Term;
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.AttributeImpl;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.IKSegmentation;
import org.wltea.analyzer.Lexeme;
import org.wltea.analyzer.dic.Dictionary;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
public class LuceneUtils {
public static boolean add(String indexPath, String lucenceKey, LuceneDB value) {
Analyzer analyzer = new IKAnalyzer();
try {
File file = new File(indexPath);
Directory dir = FSDirectory.open(file);
String lucene_pk = value.getDbtable() + "_" + value.getPk();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_31, analyzer);
// delete exists index
try {
IndexReader reader = IndexReader.open(dir, false);
Term pkTerm = new Term("lucene_pk", lucene_pk);
reader.deleteDocuments(pkTerm);
reader.close();
} catch (Exception e) {
// fix file not exist
}
// create index
IndexWriter writer = new IndexWriter(dir, config);
writer.setMergeFactor(100);
writer.setMaxBufferedDocs(100);
Document doc = new Document();
Field content = new Field(lucenceKey, value.getConetnt(), Field.Store.YES, Field.Index.ANALYZED);
doc.add(content);
doc.add(new Field("pk", String.valueOf(value.getPk()), Field.Store.YES, Field.Index.NO));
doc.add(new Field("dbtable", String.valueOf(value.getDbtable()), Field.Store.YES, Field.Index.NO));
doc.add(new Field("lucene_pk", lucene_pk, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.setBoost(value.getOrderby());
writer.addDocument(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
public static Set<LuceneDB> search(String indexPath, String luceneKey, String word, int maxcount) {
Set<LuceneDB> rst = new HashSet<LuceneDB>();
try {
StringReader reader = new StringReader(word);
File file = new File(indexPath);
Directory dir = FSDirectory.open(file);
IndexSearcher searcher = new IndexSearcher(dir);
Query query = IKQueryParser.parse(luceneKey, word);
TopDocs topDocs = searcher.search(query, maxcount);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < scoreDocs.length; i++) {
ScoreDoc scoreDoc = scoreDocs[i];
Document targetDoc = searcher.doc(scoreDoc.doc);
LuceneDB db = new LuceneDB();
db.fromDocument(targetDoc, luceneKey);
/*System.out.println(db.getConetnt() + ":");
System.out.println(scoreDoc.score);
System.out.println(searcher.explain(query, scoreDoc.doc));
System.out.println("----------------------");*/
rst.add(db);
}
} catch (Exception e) {
e.printStackTrace();
}
return rst;
}
public static void addIKAnalyzerWord(String... words){
Collection<String> datas = new HashSet<String>();
for(String word:words){
datas.add(word);
}
Dictionary.loadExtendWords(datas);
}
public static void main(String[] args) {
addIKAnalyzerWord("咨","棕");
LuceneDB value = new LuceneDB();
value.setConetnt("你好,请问我的棕子咨询的价格是什么");
value.setPk(1L);
value.setDbtable("records");
value.setOrderby(0.0f);
LuceneDB userValue = new LuceneDB();
userValue.setConetnt("你好,请问我的棕的上来价格是咨什么");
userValue.setPk(2L);
userValue.setDbtable("users");
userValue.setOrderby(0.0f);
LuceneDB userValue2 = new LuceneDB();
userValue2.setConetnt("买棕了要买的上来的方式咨询");
userValue2.setPk(3L);
userValue2.setDbtable("users");
userValue2.setOrderby(0.0f);
LuceneUtils.add("d://index2", "lucene", value);
LuceneUtils.add("d://index2", "lucene", userValue);
LuceneUtils.add("d://index2", "lucene", userValue2);
Set<LuceneDB> rst = LuceneUtils.search("d://index2", "lucene", "咨", 50);
for (LuceneDB luceneDB : rst) {
System.out.println("id:" + luceneDB.getPk() + "," + "table:" + luceneDB.getDbtable() + "," + luceneDB.getConetnt());
}
System.out.println("-------------------------------------");
Set<LuceneDB> rst2 = LuceneUtils.search("d://index2", "lucene", "棕", 50);
for (LuceneDB luceneDB : rst2) {
System.out.println("id:" + luceneDB.getPk() + "," + "table:" + luceneDB.getDbtable() + "," + luceneDB.getConetnt());
}
}
}
package com.sf.module.extension.lucene;
import java.io.Serializable;
import org.apache.lucene.document.Document;
public class LuceneDB {
private Serializable pk;
private String dbtable;
private String conetnt;
private float orderby;
public float getOrderby() {
return orderby;
}
public void setOrderby(float orderby) {
this.orderby = orderby;
}
public Serializable getPk() {
return pk;
}
public void setPk(Serializable pk) {
this.pk = pk;
}
public String getConetnt() {
return conetnt;
}
public void setConetnt(String conetnt) {
this.conetnt = conetnt;
}
public String getDbtable() {
return dbtable;
}
public void setDbtable(String dbtable) {
this.dbtable = dbtable;
}
public LuceneDB fromDocument(Document doc,String luceneKey){
this.pk=doc.get("pk");
this.conetnt=doc.get(luceneKey);
this.dbtable=doc.get("dbtable");
return this;
}
@Override
public boolean equals(Object target) {
LuceneDB obj=(LuceneDB)target;
if(obj.getPk().equals(this.getPk())
&& obj.getDbtable().equals(this.getDbtable())){
return true;
}
return false;
}
@Override
public int hashCode() {
return (this.getPk()+this.getDbtable()).hashCode();
}
}
如何使用Lucene的中文分词搜索
来源:互联网 发布日期:2011-10-05 21:08:05 浏览:26101次
导读:以下文章主要介绍的是如何进行Lucene进行中文分词和全文搜索 package com.sf.module.extension.lucene; import java.io.File; import java.io.Serializable; imp...
相关热词: lucene 中文分词 lucene数据库应用 如何使用
相关内容
AiLab云推荐
最新资讯
- 为开发AI芯片,传特斯拉已要求三星、SK海力士提供HBM4样片
- 英特尔演示资料显示未来将推 AI 芯片 Jaguar Shores
- AI 驱动的芯片设计-AI前沿讲习班(CAAI-AIDL)第十四期活动成功举办
- 台系厂商安霸的智驾芯片风口,终于来了
- 登上Nature的AI芯片设计屡遭质疑,谷歌发文反击,Jeff Dean:质疑者连预训练都没做
- 中国版脑机接口手术来了!比马斯克的更安全
- 从断供中国芯片始,三星或加速衰落,韩国距发展中国家有多远
- 树莓派 Raspberry Pi CM5 计算模块提前曝光,延续上代外形设计
- 超越硅极限:纳米3D晶体管或成AI低功耗未来之钥
- 谷歌安卓 15 QPR2 新增 Linux 终端,可在虚拟机中运行Linux 应用
本月热点
热门排行
-
存储芯片年涨七成不算完:AI需求接棒,大厂持续加注
阅读量:18036
-
美大选逼近!传大陆芯片设计业计划从台积电转单三星
阅读量:13772
-
黄仁勋对话扎克伯格:新款芯片样品本周发送,AI行业还有5年产品创新期
阅读量:12017
-
马斯克:Neuralink 今年预计完成 10 例脑机接口植入手术
阅读量:11857
-
应对先进封装挑战,芯碁微装直写光刻技术助力本土创新突破
阅读量:11516
-
黑芝麻智能登陆港交所:智能汽车AI芯片第一股,拥抱广阔机遇
阅读量:11389
推荐内容
- 2024山东国际玻璃工业技术展览会
- 2024第二十二届中国广州国际汽车展览会
- 2024年阿尔及利亚国际暖通空调制冷展览会ALGERIA
- 2024第12届中国(青岛)国际茶产业博览会(华巨臣茶博会)
- 2024阿尔及利亚国际建材展
- 2024 第二十三届新加坡国际石油及天然气展览会暨研讨会
- 2024年荷兰阿姆斯特丹船舶游艇设备展览会METS TRADE
- 2024第12届巴基斯坦(卡拉奇)国际防务与军警展
- 2024年俄罗斯莫斯科电力、电网技术展览会
- 2024(京津冀)水果产销对接会
- 2024第二十一届北方(烟台)国际果业博览会(北方果博会 NIFIE)
- 2024第十六届中国(上海)振威国际化工装备博览会(CTEF)
- 2024第七届欧洲(德国不来梅)国际空间技术展
- 2024第十七届上海国际电池工业展览会(振威电池展 CNIBF)
- 2024第二十届上海国际充电设施产业展览会(振威充电设施展 evse)
- 2024第十一届浙江义乌国际智能装备博览会
- 2024第89届全国药品交易会(药交会 PHARMCHINA)
- 2024年中国北京国际高端食品饮料博览会
- 2024年中国(北京)国际有机绿色食品展览会
- IADE2024第三届突尼斯(杰尔巴)国际航空航天与防务展
- 2024年土耳其温室农业展土耳其畜牧机械展GrowTech Eurasia
- 2024中国北京名酒节暨世界葡萄酒博览会
- 2024第十三届杭州国际跨境电商交易博览会(跨交会 ICBE)
- 2024中国健康营养博览会(秋季)(NHNE)
- 2024乌兹别克斯坦食品及包装展 UZ PROD &INTER PACK
- 日本第45届国际建筑建材与家居材料展
- 2024中国国际制造业数智化博览会
- 2024第29届深圳国际服装供应链博览会(秋季)(FS展 Fashion Source)暨AW深圳原创设计时装周
- 2024越南(胡志明)轴承展览会
- 2024越南(胡志明)橡胶机械及塑料展览会
- 2024越南(胡志明)五金机械展览会
- 2024秋季中国(广州)国际茶业博览会
- 2024越南(胡志明)电机及线圈展览会
- 2024越南(胡志明)电线电缆展览会
- 2024越南(胡志明)润滑油及应用技术展览会
- 2024越南(胡志明)焊接与切割展览会
- 2024越南(胡志明)电池产品展览会
- 2024中国国际天然提取物和健康食品配料展览会(FIC-健康展2024)暨第23届全国秋季食品添加剂和配料展览会
- 2024厦门国际眼镜业展览会(厦门眼镜展)
- 2024第十八届中国宁波中小工厂展览会
- 2024越南(胡志明市)国际工业技术装备及产品展览会
- 2024深圳国际照明展览会
- 2024越南(胡志明)煤矿技术设备展览会
- 2024第20届越南胡志明国际工业展览会
- 2024第二十二届中国(北京)国际医疗旅游展览会(正和医疗旅游展 CMTF)
- 2024越南(胡志明)金属及冶金展览会
- 2024年越南国际制药装备及医疗器械展览会
- 2024越南国际表面处理及涂料涂装展览会
- 2024越南(胡志明)国际复合材料展览会
- 2024越南(胡志明)工程机械设备展览会
- 2024越南(胡志明)锅炉及压力容器展览会
- 2024越南(胡志明)化工展览会
- 2024越南(胡志明)工业自动化及仪器仪表展览会
- 2024越南(胡志明)机床工具展览会
- 2024越南(胡志明)金属加工及焊接技术展览会
- 2024越南(胡志明)铝工业展览会