package lucene; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; 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.Term; 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.search.highlight.Formatter; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.Scorer; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; /** * lucene3.5+ik的例子 * * @author zz * @date 2012-11-29 */ public class LuceneDemo { //索引文件位置 File dataFile = new File("D://indexFile"); //使用IK分词器 Analyzer analyzer = new IKAnalyzer(); public void bulidIndex(){ Directory directory = null; IndexWriter writer = null; try { directory = FSDirectory.open(dataFile); IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer); writer = new IndexWriter(directory, writerConfig); writer.addDocument(addDocument(1, "中国好平台", "中国好平台,1是以分享知识与经验的学习交流平台,加入中国好平台,学习新知识、结交新朋友、塑造个人形象。")); writer.addDocument(addDocument(2, "中国好平台", "中国好平台,2是以分享知识与经验的学习交流平台,加入中国好平台,学习新知识、结交新朋友、塑造个人形象。")); writer.addDocument(addDocument(3, "中国好平台", "中国好平台,3是以分享知识与经验的学习交流平台,加入中国好平台,学习新知识、结交新朋友、塑造个人形象。")); writer.addDocument(addDocument(4, "资料", "中国好平台,4是以分享知识与经验的学习交流平台,加入中国好平台,学习新知识、结交新朋友、塑造个人形象。")); writer.addDocument(addDocument(5, "微知识", "中国好平台,5是以分享知识与经验的学习交流平台,加入中国好平台,学习新知识、结交新朋友、塑造个人形象。")); writer.addDocument(addDocument(6, "我", "中国好平台,6是以分享知识与经验的交流平台,加入中国好平台,新知识、结交新朋友、塑造个人形象。")); }catch(Exception ex){ ex.printStackTrace(); } finally { try { writer.close(); directory.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 添加Document */ @SuppressWarnings("deprecation") public Document addDocument(Integer id, String title, String content) { Document doc = new Document(); //Field.Index.NO 表示不索引 //Field.Index.ANALYZED 表示分词且索引 //Field.Index.NOT_ANALYZED 表示不分词且索引 doc.add(new Field("id", String.valueOf(id), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED)); return doc; } /** * 更新索引 */ public void update(Integer id, String title, String content) { try { Directory directory = FSDirectory.open(dataFile); IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer); IndexWriter writer = new IndexWriter(directory, writerConfig); Document doc = addDocument(id, title, content); Term term = new Term("id", String.valueOf(id)); writer.updateDocument(term, doc); writer.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 删除索引 */ public void delete(Integer id) { try { Directory directory = FSDirectory.open(dataFile); IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer); IndexWriter writer = new IndexWriter(directory, writerConfig); Term term = new Term("id", String.valueOf(id)); writer.deleteDocuments(term); writer.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 搜索 * @param where 搜索条件 * @param after 分页时要用到,不分页时为null */ public void search(String where, ScoreDoc after) { IndexSearcher isearcher = null; Directory directory = null; try { directory = FSDirectory.open(dataFile); //创建索引搜索器 且只读 IndexReader reader = IndexReader.open(FSDirectory.open(dataFile)); isearcher = new IndexSearcher(reader); //在索引器中使用IKSimilarity相似度评估器 //isearcher.setSimilarity(new IKSimilarity()); QueryParser parser = new QueryParser(Version.LUCENE_35, null, analyzer); Query query = parser.parse(where); //lucene3.5深度分页,每页显示10条记录 TopDocs topDocs = isearcher.searchAfter(after, query, 10); ScoreDoc[] hits = topDocs.scoreDocs; //关键字高亮 Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>"); Scorer scorer = new QueryScorer(query); Highlighter highlighter = new Highlighter(formatter, scorer); for(ScoreDoc scoreDoc : hits){ Document hitDoc = isearcher.doc(scoreDoc.doc); String id = hitDoc.get("id"); String title = hitDoc.get("title"); String content = hitDoc.get("content"); float score = scoreDoc.score; title = highlighter.getBestFragment(analyzer, "title", title); content = highlighter.getBestFragment(analyzer, "content", content); if(title == null){ title = hitDoc.get("title"); } if(content == null){ content = hitDoc.get("content"); } System.out.println("doc:" + scoreDoc.doc + " score:" + score + " id:" + id + " title:" + title + " content:" + content); } } catch (Exception e) { throw new RuntimeException(e); } finally { try { // isearcher.close(); directory.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package lucene; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class LuceneDemoTest { static LuceneDemo luceneDemo = null; @BeforeClass public static void setUpBeforeClass() throws Exception { luceneDemo = new LuceneDemo(); } @AfterClass public static void tearDownAfterClass() throws Exception { } @Test public void testBulidIndex() { luceneDemo.bulidIndex(); } @Test public void testUpdate() { luceneDemo.update(1, "测试更新", "更新内容。。。。"); } @Test public void testDelete() { luceneDemo.delete(1); } @Test public void testSearch() { String where = "title:中国好平台 content:学习"; //类似SQL为:title='中国好平台' or content='学习' //String where = "title:中国好平台 +content:学习 -id:1"; //类似SQL为:title='中国好平台' and content='学习' and id!=1 //String where = "title:我 -content:学习"; // 类似SQL为:title='中国好平台' and content!='学习' //ScoreDoc after = new ScoreDoc(0, (float)0.032529574); //luceneDemo.search(where, after); luceneDemo.search(where, null); } }
此处为造轮子,闲来无事,造个轮子,看将来是否有用得上的地方,此处其实用的是lucene4.0和IK2012都是最新版本,可以去网站去下载
lucene:http://apache.etoak.com/lucene/java/4.0.0/
ik:http://code.google.com/p/ik-analyzer/downloads/list
参考:http://www.juziku.com/sunlightcs/wiki/4205.htm
相关推荐
标题中的"C# 中文分词 LUCENE IKAnalyzer"是指使用C#语言实现的一个中文分词工具,它基于开源全文检索引擎Lucene,并且采用了IKAnalyzer(智能汉字分词系统)的Java版本进行移植。Lucene是一个强大的、高性能的信息...
IKAnalyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索和搜索引擎提供高效、快速的分词服务。...随着技术的不断进步,IKAnalyzer的持续更新将确保其在未来的搜索引擎开发中保持领先地位。
标题中的"IK和Lucene"指的是IK Analyzer与Apache Lucene两个关键组件,它们在中文文本处理和全文检索领域中有着重要应用。IK Analyzer是一个开源的Java分词器,专为中文处理而设计,广泛用于搜索引擎、信息检索系统...
本话题主要探讨的是在Java 1.5环境下,如何利用Lucene 3.0.1版本和IKAnalyzer 3.2来实现模糊查询的功能。Lucene是一个高性能、全文本搜索库,而IKAnalyzer是一个专门针对中文分词的开源分析器,它们的结合能够有效地...
在信息技术领域,数据检索和搜索引擎是至关重要的部分,而Lucene和IkAnalyzer则是其中的两大利器。本文将详细介绍如何使用Lucene 5.21版本结合IkAnalyzer 2012_V5进行文本分析和全文搜索的入门实践。 首先,让我们...
maven库中现有的ik分词器只支持低版本的Lucene,想要支持高版本的Lucene,需要重写老版本ik分词器里的部分代码. 下载代码片段后导入项目,在创建分词器的时候把new IKAnalyzer替换为 new IKAnalyzer5x即可。
Elasticsearch 是一款功能强大的全文搜索引擎,而 IK Analyzer 是一个在 Lucene 上构建的智能中文分词库。本文将深入探讨如何将 Elasticsearch Analysis IK 插件应用于 Elasticsearch 中,以实现对中文文本的高效、...
由于林良益先生在2012之后未对IKAnalyzer进行更新,后续lucene分词接口发生变化,导致不可使用,所以此jar包支持lucene6.0以上版本
solr的IK分词器JAR及配置文件 jar包和配置文件的放置位置不一样,详情可搜索 IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。...org.wltea.analyzer.lucene.IKAnalyzer jar
《深入理解Lucene与IKAnalyzer:构建全文搜索引擎》 在信息技术高速发展的今天,数据的存储与检索变得至关重要。Lucene,作为一个开源的全文检索库,为开发者提供了强大的文本搜索功能。而IKAnalyzer作为针对中文...
【Lucene4.7+IK Analyzer中文分词入门教程】 Lucene是一个开源的全文检索库,它提供了文本分析、索引和搜索的核心工具。在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源...
**Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...
1. **升级IKAnalyzer版本**:确保使用的IKAnalyzer版本与Lucene 4.3兼容。 IKAnalyzer会定期发布新版本,以适配最新版的Lucene。 2. **修改代码**:检查并修改项目中涉及Lucene API的部分,以适应新版本的API变化。 ...
除了基础的文本搜索,IK分词器和Lucene还可以结合其他技术,如NLP(自然语言处理)和信息抽取,实现更复杂的文本分析功能,如情感分析、关键词提取、主题模型等。 总的来说,IK分词器和Lucene是Java开发中的重要...
《深入理解Lucene4.0与IKAnalyzer2012:构建高效全文检索系统》 在信息化时代,数据量的快速增长使得高效的全文检索技术变得至关重要。Lucene作为Apache软件基金会的一个开源项目,是Java领域内最著名的全文搜索...
《深入理解Lucene5与IKAnalyzer5:构建高效全文搜索引擎》 在信息技术高速发展的今天,搜索引擎已经成为信息获取的重要工具。Lucene和IKAnalyzer作为Java领域内广泛应用的全文检索库和中文分词器,它们的结合为开发...
IKAnalyzer 是一个专门为 Lucene 设计的开源中文分词库,它在中文处理领域有着广泛的应用。这个版本的 IKAnalyzer 特别适用于 Lucene 5.2.1,这意味着它与该版本的 Lucene 兼容性极佳,能够提供高效、准确的中文分词...
《Lucene分词技术与IKAnalyzer详解》 在信息技术领域,搜索引擎是不可或缺的一部分,而Lucene作为Apache软件基金会的一个开放源代码项目,是Java语言开发的全文检索引擎库,为构建高效、可扩展的信息检索应用提供了...
使用lucene-3.5和IKAnalyzer2012,实现基础的全文检索实现
ikanalyzer中文分词支持lucene7.1.0是一个针对Lucene搜索引擎的中文分词扩展,由林良益先生开发,旨在提供高效、精准的中文词汇拆解功能。Lucene是一个开源全文检索库,它提供了索引和搜索文本的强大工具。然而,...