- 浏览: 188546 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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. 指定项范围查询TermRangeQuery
2. 指定数字范围查询NumericRangeQuery
3. 指定字符串开头搜索PrefixQuery
4. 组合查询BooleanQuery
2. 指定数字范围查询NumericRangeQuery
3. 指定字符串开头搜索PrefixQuery
4. 组合查询BooleanQuery
New maven project -> Create a simple project -> Group Id: com.andrew.lucene Artifact Id: Lucene04 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>Lucene04</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>
Indexer.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.IntField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class Indexer { private Integer ids[] = { 1, 2, 3 }; private String citys[] = { "aingdao", "banjing", "changhai" }; private String descs[] = { "Qingdao is b beautiful city.", "Nanjing is c city of culture.", "Shanghai is d bustling city." }; 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; } // 生成索引 private void index(String indexDir) throws Exception { dir = FSDirectory.open(Paths.get(indexDir)); IndexWriter writer = getWriter(); for (int i = 0; i < ids.length; i++) { Document doc = new Document(); doc.add(new IntField("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.YES)); writer.addDocument(doc); // 添加文档 } writer.close(); } public static void main(String[] args) throws Exception { new Indexer().index("E:\\lucene5"); } }
SearchTest.java代码 package com.andrew.lucene; import java.nio.file.Paths; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.NumericRangeQuery; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermRangeQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.BytesRef; import org.junit.After; import org.junit.Before; import org.junit.Test; public class SearchTest { private Directory dir; private IndexReader reader; private IndexSearcher is; @Before public void setUp() throws Exception { dir = FSDirectory.open(Paths.get("E:\\lucene5")); reader = DirectoryReader.open(dir); is = new IndexSearcher(reader); } @After public void tearDown() throws Exception { reader.close(); } // 指定项范围搜索 @Test public void testTermRangeQuery() throws Exception { TermRangeQuery query = new TermRangeQuery("desc", new BytesRef("b".getBytes()), new BytesRef("c".getBytes()), true, true); TopDocs hits = is.search(query, 10); for (ScoreDoc scoreDoc : hits.scoreDocs) { Document doc = is.doc(scoreDoc.doc); System.out.println(doc.get("id")); System.out.println(doc.get("city")); System.out.println(doc.get("desc")); } } // 指定数字范围 @Test public void testNumericRangeQuery() throws Exception { NumericRangeQuery<Integer> query = NumericRangeQuery.newIntRange("id", 1, 2, true, true); TopDocs hits = is.search(query, 10); for (ScoreDoc scoreDoc : hits.scoreDocs) { Document doc = is.doc(scoreDoc.doc); System.out.println(doc.get("id")); System.out.println(doc.get("city")); System.out.println(doc.get("desc")); } } // 指定字符串开头搜索 @Test public void testPrefixQuery() throws Exception { PrefixQuery query = new PrefixQuery(new Term("city", "a")); TopDocs hits = is.search(query, 10); for (ScoreDoc scoreDoc : hits.scoreDocs) { Document doc = is.doc(scoreDoc.doc); System.out.println(doc.get("id")); System.out.println(doc.get("city")); System.out.println(doc.get("desc")); } } // 多条件查询 @Test public void testBooleanQuery() throws Exception { NumericRangeQuery<Integer> query1 = NumericRangeQuery.newIntRange("id", 1, 2, true, true); PrefixQuery query2 = new PrefixQuery(new Term("city", "a")); BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder(); booleanQuery.add(query1, BooleanClause.Occur.MUST); booleanQuery.add(query2, BooleanClause.Occur.MUST); TopDocs hits = is.search(booleanQuery.build(), 10); for (ScoreDoc scoreDoc : hits.scoreDocs) { Document doc = is.doc(scoreDoc.doc); System.out.println(doc.get("id")); System.out.println(doc.get("city")); System.out.println(doc.get("desc")); } } } 运行结果: 1 aingdao Qingdao is b beautiful city. 2 banjing Nanjing is c city of culture. 3 changhai Shanghai is d bustling city. 1 aingdao Qingdao is b beautiful city. 2 banjing Nanjing is c city of culture. 1 aingdao Qingdao is b beautiful city. 1 aingdao Qingdao is b beautiful city.
相关推荐
在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较低。 - **索引查询**:基于预...
Lucene虽然不直接提供NLP功能,但可以通过与其他NLP库(如Stanford NLP或NLTK)集成,实现词性标注、命名实体识别、情感分析等功能,从而帮助确定哪些单词或句子是关键的。例如,高频词汇可能包含大量停用词,而真正...
Lucene支持布尔查询、短语查询、模糊查询等多种查询类型。 4. **结果排序**:Lucene通过评分机制(如TF-IDF)对搜索结果进行排序,得分最高的结果优先展示。 5. **过滤与聚合**:Filter和Collector组件可以用于...
- **Miscellaneous模块**:包含其他额外的工具和功能,如`lucene-misc-4.7.0.jar`。 - **Codecs模块**:提供了不同的编码方式,用于存储和检索索引,如`lucene-codecs-4.7.0.jar`。 - **Contrib模块**:包含社区...
这使得用户能够按类别聚合文档,例如,根据作者、日期或其他分类标准来查看搜索结果。 在 Lucene 中,分组功能并不是内建的,但可以通过自定义 collector 来实现。`GroupCollector` 就是这样一个关键组件,它是实现...
在3.3.0版本中,Lucene提供了强大的文本搜索功能,包括分词、索引创建、查询解析和结果排序等。这个"Lucene3.3.0学习Demo"是针对这一版本进行的实践教学资源,旨在帮助开发者更好地理解和使用Lucene。 首先,我们来...
这种查询方式在需要对搜索结果进行自定义排序或加权时非常有用。 **描述解析:** 博文链接给出的是一个在iteye博客平台上的文章,作者为"iamyida",该文章详细探讨了如何在Lucene5中使用FunctionQuery进行功能查询...
4. 高级特性:Lucene还提供了如布尔查询、短语查询、模糊查询、范围查询等多种查询方式,以及评分机制、过滤器、聚合等功能,可以满足复杂的搜索需求。 **4. 应用场景** Lucene广泛应用于网站搜索引擎、企业内部...
4. **codecs jar包**:定义了索引的编码和解码方式,如`lucene-codecs-4.9.0.jar`,不同版本的编码格式可能会影响索引的存储效率和检索性能。 5. **contrib jar包**:这些是社区贡献的扩展功能,例如`lucene-memory...
3. **查询解析**:Lucene支持丰富的查询语法,包括布尔查询、短语查询、范围查询、模糊查询等,同时提供查询分析器,将用户输入的查询字符串转化为适合索引的查询表达式。 4. **搜索与评分**:Lucene的搜索算法基于...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程...以上就是关于"ssh+lucene搜索实例"的相关知识点,通过这种方式,可以有效地在分布式环境中实现全文搜索功能,提高数据检索的效率和便利性。
3. 高级特性:Lucene支持布尔查询、短语查询、模糊查询、范围查询等多种查询方式,还可以实现自定义排序和高亮显示搜索结果。 4. 更新与删除:通过IndexWriter可以更新已索引的文档,或者删除不再需要的文档。 四...
6. **QueryParser**: 查询解析器将用户的自然语言查询转换为Lucene理解的查询语法,支持多种查询构造方式,如布尔运算符、短语查询等。 7. **ScoreDoc**: 当搜索器返回结果时,ScoreDoc对象包含了每个匹配文档的...
- **布尔搜索**:讨论了基于布尔逻辑的查询方式,如AND、OR、NOT操作符的应用。 - **近似匹配**:讲解了如何实现模糊匹配、同义词扩展等功能,以提高搜索的灵活性和准确性。 - **排序与评分**:分析了Lucene中...
6. 集成性增强:Lucene 4.6.0可以轻松集成到其他Java应用中,如Solr和Elasticsearch,提供更高级别的搜索服务。 三、使用Lucene 4.6.0的步骤 1. 创建索引:定义文档模型,实例化Analyzer,创建IndexWriter,并将...
- 更新文档:Lucene不支持直接更新已存在的文档,而是通过删除旧文档并重新添加新文档的方式来实现。 - 删除文档:调用`IndexWriter`的`deleteDocuments`方法,传入匹配待删除文档的查询条件。 **5. 关闭索引器** ...
在实际应用中,开发者通常会将Apache Lucene与诸如Spring、Hibernate等其他Java框架集成,以构建完整的搜索引擎解决方案。导入"Lucene.jar"到项目工程中,就可以利用这些功能来提升应用的搜索体验。 总的来说,...
Lucene支持灵活的查询语法,允许用户通过自然语言风格的查询字符串来表达复杂的搜索需求。JavaCC是一个强大的编译工具,用于生成解析器,而QueryParser则是用于解析查询字符串的Lucene组件。 #### 七、Lucene的查询...
用户可以使用布尔运算符、短语查询、范围查询等多种方式构建复杂的查询。 6. **排序与评分(Scoring)**:Lucene 会根据相关性对搜索结果进行评分,高分的文档排在前面。相关性通常基于词频、TF-IDF(词频-逆文档...
Lucene支持多种查询类型,如布尔查询(BooleanQuery)、短语查询(PhraseQuery)、范围查询(RangeQuery)等,以及复杂的组合查询。 5. **搜索与评分**:使用Query对象在索引中搜索匹配的文档,Lucene会返回一个...