`

Lucene查询对象浅析(二)

阅读更多

第四种:短语搜索。一般用户在搜索的时候都会输入一个关键词来搜索,短语搜索就是用来应对这种需求的。

Document doc1 = new Document();
		Document doc2 = new Document();
		Document doc3 = new Document();
		Field field1 = new Field("postTitle","Java语言",Field.Store.YES,Field.Index.TOKENIZED);
		Field field2 = new Field("postTitle","言语",Field.Store.YES,Field.Index.TOKENIZED);
		Field field3 = new Field("postTitle","Luene开发详解",Field.Store.YES,Field.Index.TOKENIZED);
		doc1.add(field1);
		doc2.add(field2);
		doc3.add(field3);
		
		IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);
		writer.addDocument(doc1);
		writer.addDocument(doc2);
		writer.addDocument(doc3);
		writer.close();
		
		PhraseQuery query = new PhraseQuery();
		query.add(new Term("postTitle","语"));
		query.add(new Term("postTitle","言"));
		
		IndexSearcher searcher = new IndexSearcher(STORE_PATH);
		Hits hits = searcher.search(query);
		System.out.println("phraseQuery demo------");
		System.out.println("hits.length()==" + hits.length());
		for(int i = 0;i<hits.length();i++){
			System.out.println(hits.doc(i));
}

 运行结果:

 

phraseQuery demo------
hits.length()==1
Document<stored/uncompressed,indexed,tokenized<postTitle:Java语言>>

 

第五种:多短语搜索。多短语搜索顾名思意也就是对多个短语进行搜索,它容许指定短语的前缀和后缀来进行组合,然后在进行搜索。

代码如下:

Document doc1 = new Document();
		Document doc2 = new Document();
		Document doc3 = new Document();
		Field field1 = new Field("postTitle","中国人是伟大的",Field.Store.YES,Field.Index.TOKENIZED);
		Field field2 = new Field("postTitle","中华名族是伟大的名族",Field.Store.YES,Field.Index.TOKENIZED);
		Field field3 = new Field("postTitle","党中央",Field.Store.YES,Field.Index.TOKENIZED);
		doc1.add(field1);
		doc2.add(field2);
		doc3.add(field3);
		
		IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);
		writer.addDocument(doc1);
		writer.addDocument(doc2);
		writer.addDocument(doc3);
		writer.close();
		
		MultiPhraseQuery query = new MultiPhraseQuery();
		//加入短语前缀
		query.add(new Term("postTitle","中"));
		//加入短语后缀
		query.add(new Term[]{new Term("postTitle","国"),new Term("postTitle","华"),new Term("postTitle","央")});
		
		IndexSearcher searcher = new IndexSearcher(STORE_PATH);
		Hits hits = searcher.search(query);
		System.out.println("multiPhraseQuery demo------");
		System.out.println("hits.length()==" + hits.length());
		for(int i = 0;i<hits.length();i++){
			System.out.println(hits.doc(i));
}

 运行结果如下:

multiPhraseQuery demo------
hits.length()==3
Document<stored/uncompressed,indexed,tokenized<postTitle:党中央>>
Document<stored/uncompressed,indexed,tokenized<postTitle:中国人是伟大的>>
Document<stored/uncompressed,indexed,tokenized<postTitle:中华名族是伟大的名族>>

 

 

第六种:前缀搜索。前缀搜索主要是用来根据指定的前缀进行搜索。

代码如下:

Document doc1 = new Document();
		Document doc2 = new Document();
		Document doc3 = new Document();
		Field field1 = new Field("postTitle","Java语言简介",Field.Store.YES,Field.Index.TOKENIZED);
		Field field2 = new Field("postTitle","JavaEE各种框架",Field.Store.YES,Field.Index.TOKENIZED);
		Field field3 = new Field("postTitle","Luene开发详解",Field.Store.YES,Field.Index.TOKENIZED);
		doc1.add(field1);
		doc2.add(field2);
		doc3.add(field3);
		
		IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);
		writer.addDocument(doc1);
		writer.addDocument(doc2);
		writer.addDocument(doc3);
		writer.close();
		
		Term term = new Term("postTitle","java");
		
		Query query = new PrefixQuery(term);
		
		IndexSearcher searcher = new IndexSearcher(STORE_PATH);
		Hits hits = searcher.search(query);
		System.out.println("PrefixQuery demo------");
		System.out.println("hits.length()==" + hits.length());
		for(int i = 0;i<hits.length();i++){
			System.out.println(hits.doc(i));
}

 运行结果:

PrefixQuery demo------
hits.length()==2
Document<stored/uncompressed,indexed,tokenized<postTitle:Java语言简介>>
Document<stored/uncompressed,indexed,tokenized<postTitle:JavaEE各种框架>>

 

2
3
分享到:
评论

相关推荐

    Lucene3.0浅析

    Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析

    lucene的查询语法事例

    **Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...

    lucene查询工具类和IndexSearcher分页查询示例

    在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...

    Lucene In Action 第二版 高清中文版+附书源代码

    3. **查询处理**:详细阐述了Lucene的查询语法和查询对象,如何构造复杂查询,以及如何实现布尔逻辑、短语匹配和模糊搜索。 4. **性能优化**:讨论了如何提高索引速度和查询效率,包括内存管理、磁盘I/O优化和索引...

    lucene in action 第二版

    “java lucene教程”标签说明了这本书的读者对象主要是使用Java语言的程序员,并且这本书是专注于Lucene的教程。对于Java开发者来说,Lucene是一个非常实用的工具,它可以帮助他们在应用中加入强大的搜索功能。 ###...

    Lucene3.0之查询类型详解

    - **QueryParser**:将用户的非格式化查询转换为Query对象,支持自动分词和分析。 - **Hits**:存储查询结果的集合,按相关性排序,方便结果展示和处理。 5. **查询类型**: - **TermQuery**:是最基本的查询...

    Lucene实战(第二版)

    《Lucene实战(第二版)》是一本深入探讨Apache Lucene全文搜索引擎库的权威书籍,主要面向对Java和搜索引擎技术感兴趣的开发者。这本书详尽地介绍了如何利用Lucene进行信息检索、文本分析和索引构建,同时也涵盖了...

    Lucene in Action第二版(中文和英文)

    《Lucene in Action》第二版是一本专注于开源全文搜索引擎库Lucene的专业著作,由美国的Otis Gospodnetic和Erik Hatcher共同撰写。这本书深入浅出地讲解了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者...

    lucene查询结果集分页代码

    而第二种思路就是,我直接从搜索到的结果集种显示前十条给第一页显示,第二页的时候,我在查询一次,给出10-20条数据给第二页显示,我每次翻页都要重新查询 第三种思路就变成了 我第一页仅需要10条数据,但是我一次读出来...

    lucene in action 2nd edition, lucene in action 第二版 PDF

    《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者和信息检索爱好者的...

    lucene表达式处理查询

    Lucene表达式查询是基于Analyzer和QueryParser实现的,它们负责将用户的输入转换为可执行的查询对象。Analyzer用于分词,QueryParser则解析这些词汇并生成对应的查询结构。这种查询方式提供了更大的灵活性和精确性,...

    lucene做索引查询流程

    lucene 做索引查询流程,来自《lucene in action》

    Lucene 索引的简单使用

    本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...

    lucene实现索引查询

    ### 二、查询索引 查询索引包括以下步骤: 1. **打开索引目录**:与创建索引类似,先打开索引所在的目录。 2. **创建分词器**:同样需要一个分词器来处理查询字符串。 3. **创建索引读取器**:`IndexReader`用于...

    Lucene实战(中文版第二版)对应Lucene版本

    2. **查询解析**:Lucene提供了`QueryParser`类用于将用户输入的文本转换为查询对象。3.0.3版本中,你可以了解到标准查询解析器的工作原理,以及如何自定义查询解析规则。 3. **搜索执行**:通过`Searcher`类,你...

    Lucene时间区间搜索

    在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...

    lucene对象转换

    lucene插件中 docemenu和任意对象的转换

    Lucene实战(第二版)源代码

    Analyzer负责将输入文本分解为可搜索的词项,IndexWriter则用于创建或更新索引,Directory是存储索引的接口,Document用来封装待索引的信息,而QueryParser则将用户输入的查询字符串转化为Lucene能理解的查询对象。...

    Lucene索引和查询

    查询阶段,用户输入查询字符串,Lucene将这个字符串转换为查询对象,然后与索引进行匹配。查询操作通常包括以下步骤: - 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 ...

Global site tag (gtag.js) - Google Analytics