luncene

本文介绍如何使用Lucene进行文本搜索,包括创建索引、执行搜索及调整索引设置等关键步骤。文中还探讨了不同字段类型的作用及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

luncene是一个 文本搜索引擎工具库,使用简单


1, 创建索引

 File indexDir=new File("c:\\temp\\index");
File dataDir=new File("c:\\temp\\data");

IndexWrtier writer=new IndexWriter(indexDir,new StandarAnalyzer(),true);
writer.setUseCompoundFile(false);

Document doc=new Docment();
doc.add(Field.Text("contents",new FileReader(f));
doc .add(Field.Keyword("filename",f.getCanonicalPath()));
writer.addDocument(doc);

writer.optimize();
writer.close();


2, 搜索

Directory fsDir=FSDirectory.getDirectory(indexDir,false);
IndexiSearcher is = new IndexSearcher(fsDir);
String q="google";
Query query=QueryParser.parse(q,"contents",new StandardAnalyzer());
Hits hits=is.search(query);

for(int i=0;i<hits.length();i++){
Document doc=hits.doc(i);
System.out.println(doc.get("filename"));
}



3, Field 类
Keyword: 不需要分析,但是会被逐字逐句的被索引并存储。适合URL, 文件系统路径,日期,个人姓名。

UnIndexed: 既不被分析也不索引,但会被存储在索引文件里
UnStored: 与UnIndexed相反,会分析索引,但不会存储,适合大数据文件,如网页正文

Text:需要分析索引,string 存储,Reader不存储


4, 优化

1, 可追加域

 String baseWord="fast";
String synonyms[]=String{"quick","rapid","speedy"};
Document doc=new Document();
doc.add(Field.Tex("word", baseWord);
for(int i=0;i<synonyms.length;i++){
doc.add(Filed.Text("word",synonyms[i]));
}


2, 使用内部编号删除文档

  IndexReader reader=new IndexReader.open(dir);
reader.delete(1);
reader.maxDoc();
reader.numDocs();

reader.delete(new Term("city","beijin"));


通过批量删除更新:
1, 打开IndexReader对象
2, 删除所有需要删除的Document对象
3,关闭IndexReader
4, 打开IndexWriter
5, 添加所需要的Document
6, 关闭IndexWriter

3, doc.setBosst(1.0) 可加强索引重要性比重

4, writer.mergeFactor, maxMergeDocs, minMergeDocs 值提高性能

5, 内存索引 RAMDirectory 会把索引放在内存中获得最高性能

6. writer.maxFieldLength 限制搜索数量,如果数据量大的话这个很有用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值