Lucene简单使用
来源:互联网 发布:java获取ad域用户信息 编辑:程序博客网 时间:2024/05/16 02:00
上一篇文章我们简单介绍了下Lucene的基本情况,作者也是自学的,如果有什么不对的地方还请各位师兄提出来,谢谢
1.将上次文章列出的jar包导入工程
2.整个过程的思路大概就是:
1.将需要被搜索的对象转换成索引对象
2.写入文件夹
3.获取搜索关键词
4.读取索引文件并进行搜索
5.获得结果
3.我们完成第一步,创建索引文件
1.code:
private static final String path = "C:/test/Index";//索引文件放置的地方private static File file; //索引文件对象private static Directory directory; //索引放置目录private static IndexSearcher search;//索引搜索对象private static final Analyzer analyzer = new StandardAnalyzer();//这是分词器,我现在用的是标准分词器,采用的一元分词法,下篇文章我会是用结果高亮和中文分词器public void createIndex(List<String> res) throws IOException{ //创建索引 IndexWriterConfig iwc = new IndexWriterConfig(analyzer); //创建一个索引写入流配置,并将分词器作为参数传给构造方法 file = new File(path);//创建文件对象 directory = FSDirectory.open(file.toPath());//创建索引放置目录 IndexWriter iw = new IndexWriter(directory, iwc); //创建索引写入流,并将配置和索引目录通过参数传入,负责将内容写入磁盘 Iterator<String> it = res.iterator();//获取list的迭代器 Document doc = null;//创建document,用来存储索引的单位 while(it.hasNext()){ String str = it.next(); doc = new Document(); doc.getFields().add(new TextField("news", str, Field.Store.YES)); //Field.Store.YES在搜索时被搜索,“news”是该索引的域名,这是将该字段加入索引文档 iw.addDocument(doc); } if(iw != null){ iw.close(); }}
2.以上代码就是创建索引文件,之前忘了介绍Lucene的基本原理,稍后我会补上一篇文章。
3.Lucene将搜索内容转换成文件存储在硬盘上,而每次搜索都是搜索这些文件,并且从这些读取内容,这就意味着即使数据库里更新了,这些文件也无法更新,而且,更新的时候必须把这个文件夹进行手动删除,然后生成新的索引文件
4.这个方法的参数是一个list,这是我从数据库里面拿出来的一个字段,可以根据你的需要更改
4.完成写入后该是是用索引文件了
1.code:
public void search(String keyword) throws Exception{ //关键词搜索 if(directory == null){ new Exception("No Index"); } IndexReader ir = DirectoryReader.open(directory);//通过索引目录对象打开索引文件读取流 search = new IndexSearcher(ir);//将流给索引对象 QueryParser queryParser = new QueryParser("news", analyzer); //创建查询解析器,将域名和分词器作为参数 Query query = queryParser.parse(keyword);//将关键词传入解析器获得查询对象 TopDocs topdocs = search.search(query, 100); //获得前100条结果,topdocs类似于指针容器,指向这些结果 ScoreDoc[] scoredoc = topdocs.scoreDocs; //获得这些结果的文档集合,文档包括了文档ID和文档得分 for (ScoreDoc scoreDoc2 : scoredoc) { Document doc = search.doc(scoreDoc2.doc);//根据ID从搜索中搜索出文档 System.out.println(doc.get("news"));//获取文档内容并打印 }}
}
5.以上就完成了搜索的代码,这是简单的是用
6.所有代码:
1.HelloLucene.java
package lucenetest;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.TextField;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;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;public class HelloLucene { //第一个Lucene程序,是用数据库里的数据 private static final String path = "C:/test/Index";//索引文件放置的地方 private static File file; //索引文件对象 private static Directory directory; //索引放置目录 private static IndexSearcher search;//索引搜索对象 private static final Analyzer analyzer = new StandardAnalyzer(); public void createIndex(List<String> res) throws IOException{ //创建索引 IndexWriterConfig iwc = new IndexWriterConfig(analyzer);//创建一个索引写入流配置,并将分词器作为参数传给构造方法 file = new File(path);//创建文件对象 directory = FSDirectory.open(file.toPath());//创建索引放置目录 IndexWriter iw = new IndexWriter(directory, iwc);//创建索引写入流,并将配置和索引目录通过参数传入 Iterator<String> it = res.iterator();//获取list的迭代器 Document doc = null;//创建document,用来存储索引的单位 while(it.hasNext()){ String str = it.next(); doc = new Document(); doc.getFields().add(new TextField("news", str, Field.Store.YES));//Field.Store.YES在搜索时被搜索,“news”是该索引的域名 iw.addDocument(doc); } if(iw != null){ iw.close(); } } public void search(String keyword) throws Exception{ //关键词搜索 if(directory == null){ new Exception("No Index"); } IndexReader ir = DirectoryReader.open(directory); search = new IndexSearcher(ir); QueryParser queryParser = new QueryParser("news", analyzer);//创建查询解析器,将域名和分词器作为参数 Query query = queryParser.parse(keyword); //将关键词传入解析器获得查询对象 TopDocs topdocs = search.search(query, 100); //获得前100条结果,topdocs类似于指针容器,指向这些结果 ScoreDoc[] scoredoc = topdocs.scoreDocs;//获得这些结果的文档集合,文档包括了文档ID和文档得分 for (ScoreDoc scoreDoc2 : scoredoc) { Document doc = search.doc(scoreDoc2.doc);//根据ID从搜索中搜索出文档 System.out.println(doc.get("news"));//获取文档内容并打印 } }}
2.Test.java
package lucenetest;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import org.newsky.util.JDBCUtil;public class Test { public static void main(String[] args) { HelloLucene h = new HelloLucene(); try { Connection conn = JDBCUtil.getConn(); PreparedStatement pre = conn.prepareStatement("select newsmodel from tb_news"); ResultSet res = pre.executeQuery(); List<String> list = new ArrayList<String>(); while(res.next()){ list.add(res.getString(1)); } JDBCUtil.closeAll(conn, pre, res); h.createIndex(list); h.search("长京东公司"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
请忽略测试代码的不规范
在这里希望大神能给些指导,以及能告诉小弟有什么好用的中文分词器,谢谢各位,目前用的IK
0 0
- Lucene的简单使用
- Lucene的简单使用
- lucene简单使用
- Lucene简单使用
- lucene简单使用
- lucene的简单使用
- Lucene的简单使用
- Lucene的简单使用
- lucene简单安装使用笔记
- Lucene索引的简单使用
- Lucene的使用以及简单介绍
- 简单的lucene框架 Compass 的使用
- Lucene简单使用一之文件索引
- Lucene简单的使用配置详解
- 使用lucene实现简单的全文检索
- lucene使用
- Lucene-使用
- 使用compass+lucene实现简单的全文检索功能
- hashmap统计字符串中每个字符出现的次数
- beanshell
- linux黑科技---GREP:查找文件夹下特定字符串
- Linux设备驱动程序--学习笔记(2)
- springmvc注解方式
- Lucene简单使用
- 串的静态顺序存储基本操作
- Eclipse插件,只给你推荐这几个
- Cypher查询语言--Neo4j中的SQL(1)
- 编程谈
- Fresco源码分析
- U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法
- java设计模式进阶_dao
- Pyqt5系列(二 )-第一个PyQt程序