- 浏览: 188158 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. 添加、删除、修改文档
2. 文档域加权
New maven project -> Create a simple project -> Group Id: com.andrew.lucene Artifact Id: Lucene02 Version: 0.0.1-SNAPSHOT Packaging: jar
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.andrew.lucene</groupId> <artifactId>Lucene02</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>5.3.1</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>5.3.1</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>5.3.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
IndexingTest.java代码 package com.andrew.lucene; import java.nio.file.Paths; 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.StringField; 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.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.junit.Before; import org.junit.Test; public class IndexingTest { private String ids[] = { "1", "2", "3" }; private String citys[] = { "qingdao", "nanjing", "shanghai" }; private String descs[] = { "Qingdao is a beautiful city.", "Nanjing is a city of culture.", "Shanghai is a bustling city." }; private Directory dir; @Before public void setUp() throws Exception { dir = FSDirectory.open(Paths.get("E:\\lucene2")); IndexWriter writer = getWriter(); for (int i = 0; i < ids.length; i++) { Document doc = new Document(); doc.add(new StringField("id", ids[i], Field.Store.YES)); doc.add(new StringField("city", citys[i], Field.Store.YES)); doc.add(new TextField("desc", descs[i], Field.Store.NO)); writer.addDocument(doc); // 添加文档 } writer.close(); } // 获取IndexWriter实例 private IndexWriter getWriter() throws Exception { Analyzer analyzer = new StandardAnalyzer(); // 标准分词器 IndexWriterConfig iwc = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(dir, iwc); return writer; } // 测试写了几个文档 @Test public void testIndexWriter() throws Exception { IndexWriter writer = getWriter(); System.out.println("写入了" + writer.numDocs() + "个文档"); writer.close(); } // 测试读取文档 @Test public void testIndexReader() throws Exception { IndexReader reader = DirectoryReader.open(dir); System.out.println("最大文档数:" + reader.maxDoc()); System.out.println("实际文档数:" + reader.numDocs()); reader.close(); } // 测试删除 在合并前 @Test public void testDeleteBeforeMerge() throws Exception { IndexWriter writer = getWriter(); System.out.println("删除前:" + writer.numDocs()); writer.deleteDocuments(new Term("id", "1")); writer.commit(); System.out.println("writer.maxDoc():" + writer.maxDoc()); System.out.println("writer.numDocs():" + writer.numDocs()); writer.close(); } // 测试删除 在合并后 @Test public void testDeleteAfterMerge() throws Exception { IndexWriter writer = getWriter(); System.out.println("删除前:" + writer.numDocs()); writer.deleteDocuments(new Term("id", "1")); writer.forceMergeDeletes(); // 强制删除 writer.commit(); System.out.println("writer.maxDoc():" + writer.maxDoc()); System.out.println("writer.numDocs():" + writer.numDocs()); writer.close(); } // 测试更新 @Test public void testUpdate() throws Exception { IndexWriter writer = getWriter(); Document doc = new Document(); doc.add(new StringField("id", "1", Field.Store.YES)); doc.add(new StringField("city", "qingdao", Field.Store.YES)); doc.add(new TextField("desc", "dsss is a city.", Field.Store.NO)); writer.updateDocument(new Term("id", "1"), doc); writer.close(); } } 执行结果 最大文档数:3 实际文档数:3 删除前:3 writer.maxDoc():3 writer.numDocs():2 删除前:3 writer.maxDoc():2 writer.numDocs():2
2. 文档域加权
IndexingTest2.java代码 package com.andrew.lucene; import java.nio.file.Paths; 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.StringField; 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.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.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.junit.Test; public class IndexingTest2 { private String ids[] = { "1", "2", "3", "4" }; private String authors[] = { "Jack", "Marry", "John", "Json" }; private String positions[] = { "accounting", "technician", "salesperson", "boss" }; private String titles[] = { "Java is a good language.", "Java is a cross platform language", "Java powerful", "You should learn java" }; private String contents[] = { "If possible, use the same JRE major version at both index and search time.", "When upgrading to a different JRE major version, consider re-indexing. ", "Different JRE major versions may implement different versions of Unicode,", "For example: with Java 1.4, `LetterTokenizer` will split around the character U+02C6," }; private Directory dir; // 获取IndexWriter实例 private IndexWriter getWriter() throws Exception { Analyzer analyzer = new StandardAnalyzer(); // 标准分词器 IndexWriterConfig iwc = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(dir, iwc); return writer; } // 生成索引 @Test public void index() throws Exception { dir = FSDirectory.open(Paths.get("E:\\lucene3")); IndexWriter writer = getWriter(); for (int i = 0; i < ids.length; i++) { Document doc = new Document(); doc.add(new StringField("id", ids[i], Field.Store.YES)); doc.add(new StringField("author", authors[i], Field.Store.YES)); doc.add(new StringField("position", positions[i], Field.Store.YES)); // 加权操作 TextField field = new TextField("title", titles[i], Field.Store.YES); // if ("boss".equals(positions[i])) { // field.setBoost(1.5f); // } doc.add(field); doc.add(new TextField("content", contents[i], Field.Store.NO)); writer.addDocument(doc); // 添加文档 } writer.close(); } // 查询 @Test public void search() throws Exception { dir = FSDirectory.open(Paths.get("E:\\lucene3")); IndexReader reader = DirectoryReader.open(dir); IndexSearcher is = new IndexSearcher(reader); String searchField = "title"; String q = "java"; Term t = new Term(searchField, q); Query query = new TermQuery(t); TopDocs hits = is.search(query, 10); System.out.println("匹配 '" + q + "',总共查询到" + hits.totalHits + "个文档"); for (ScoreDoc scoreDoc : hits.scoreDocs) { Document doc = is.doc(scoreDoc.doc); System.out.println(doc.get("author")); } reader.close(); } } 执行结果 未使用加权: 匹配 'java',总共查询到4个文档 John Jack Marry Json 使用加权: 匹配 'java',总共查询到4个文档 Json John Jack Marry
相关推荐
在创建索引时,Lucene会对文档进行分词,生成一系列的关键词(也称为术语或Token),然后构建倒排索引。倒排索引是一种数据结构,它将每个关键词与包含该关键词的文档位置相关联,使得我们可以迅速找到包含特定词汇...
lucene构建索引,从HelloWorld到项目具体使用 ====================项目一:=================================== qianjun.lucene.first ====================项目二:=================================== qianjun....
这些示例代码可以帮助开发者理解如何使用Lucene构建索引,以及如何执行搜索操作。 总结来说,Lucene的索引机制是其高效搜索能力的关键。通过建立倒排索引,Lucene能够在大量数据中快速找到匹配的文档,使得全文检索...
通过上述步骤,我们可以构建一个基于Lucene的增量索引系统,高效地处理数据变化,同时保持搜索效率。在实际应用中,还需要结合具体的业务需求和数据特性进行定制化开发。通过持续监控和优化,我们可以确保系统的稳定...
《深入理解Lucene:解析索引文件的读取》 Lucene,作为一款强大的全文搜索引擎库,被广泛应用于各类信息检索系统中。它的核心功能之一就是构建和读取索引文件,以高效地进行文本搜索。本文将深入探讨Lucene如何读取...
本文档主要探讨了基于Apache Lucene的索引与搜索技术,这是构建高效全文搜索引擎的关键组成部分。Lucene是一个开源的Java库,提供了强大的文本分析、索引和搜索功能,被广泛应用于各种信息检索系统中。 第一章 引言...
Lucene 是一个高性能、全文本搜索库,被广泛用于构建高效的搜索引擎和信息检索系统。它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是...
然而,在面对海量数据时,Lucene的索引构建过程可能会变得非常耗时,从而影响用户体验。因此,开发一种基于Lucene的分布式并行索引技术显得尤为重要。 #### 二、Lucene基础概述 Lucene是一个高性能、全功能的文本...
- Lucene是一个开源的全文搜索引擎库,能够帮助开发者构建应用程序内的搜索功能。 - Lucene的核心能力在于文档索引和查询,它提供了强大的API来实现高效的文档检索。 2. **XML简介** - XML(Extensible Markup ...
在深入探讨Lucene删除索引这一主题之前,我们先来理解一下Lucene的基本概念。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。它提供了高性能、可扩展的搜索和索引功能,广泛应用于各种应用程序中,如...
Luke是一个方便的索引查看和诊断工具,可以访问Lucene构建的索引文件,显示和修改某些索引内容。luke 7.2.0 支持最新的 lucene7 索引查看 github地址:https://github.com/DmitryKey/luke/releases
通过阅读和分析源代码,我们可以学习到如何操作Lucene索引,以及如何构建类似的工具。 总结而言,luke作为Lucene索引的可视化工具,极大地便利了开发者对索引的理解和调试。无论是初学者还是经验丰富的开发人员,都...
《Lucene全文检索:简单索引与搜索实例详解》 Lucene是Apache软件基金会的开源项目,是一款强大的全文检索库,被广泛应用于Java开发中,为开发者提供了构建高性能搜索引擎的能力。在本文中,我们将深入探讨如何基于...
它为开发者提供了构建搜索应用所需的所有基本工具,包括索引文档、执行查询、处理分析等。Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的...
Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文检索功能。在深入理解Lucene...
Lucene索引的构建和查询都是基于反向索引进行的,这意味着当用户输入查询词时,Lucene能够迅速找到包含这些词的所有文档,而不必遍历整个文档集。 #### 索引文件格式 Lucene索引文件格式是其内部设计的关键部分,...
在使用 Lucene 进行信息检索时,有时我们需要对建立的索引进行查看、调试或分析,这时就需要借助 Lucene 的索引查看工具。 Luke 是一个非常实用的 Lucene 索引浏览器,全称为 Lucidworks Luke。它允许用户以图形化...
**Lucene索引的基本操作** Lucene是一款由Apache软件基金会开发的全文检索库,它提供了高效、可扩展的全文检索功能。在Java开发环境中,Lucene是广泛使用的文本搜索工具,能够帮助开发者构建复杂的搜索引擎。本文将...
《深入理解Luke:洞察Lucene索引文件》 在信息技术领域,搜索引擎的高效运作离不开对数据的快速检索,而Lucene作为开源全文检索库,扮演了核心角色。在这个过程中,Luke工具提供了一种直观的方式,让我们能够查看和...