第四种:短语搜索。一般用户在搜索的时候都会输入一个关键词来搜索,短语搜索就是用来应对这种需求的。
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各种框架>>
分享到:
相关推荐
Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析
**Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...
在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...
3. **查询处理**:详细阐述了Lucene的查询语法和查询对象,如何构造复杂查询,以及如何实现布尔逻辑、短语匹配和模糊搜索。 4. **性能优化**:讨论了如何提高索引速度和查询效率,包括内存管理、磁盘I/O优化和索引...
“java lucene教程”标签说明了这本书的读者对象主要是使用Java语言的程序员,并且这本书是专注于Lucene的教程。对于Java开发者来说,Lucene是一个非常实用的工具,它可以帮助他们在应用中加入强大的搜索功能。 ###...
- **QueryParser**:将用户的非格式化查询转换为Query对象,支持自动分词和分析。 - **Hits**:存储查询结果的集合,按相关性排序,方便结果展示和处理。 5. **查询类型**: - **TermQuery**:是最基本的查询...
《Lucene实战(第二版)》是一本深入探讨Apache Lucene全文搜索引擎库的权威书籍,主要面向对Java和搜索引擎技术感兴趣的开发者。这本书详尽地介绍了如何利用Lucene进行信息检索、文本分析和索引构建,同时也涵盖了...
《Lucene in Action》第二版是一本专注于开源全文搜索引擎库Lucene的专业著作,由美国的Otis Gospodnetic和Erik Hatcher共同撰写。这本书深入浅出地讲解了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者...
而第二种思路就是,我直接从搜索到的结果集种显示前十条给第一页显示,第二页的时候,我在查询一次,给出10-20条数据给第二页显示,我每次翻页都要重新查询 第三种思路就变成了 我第一页仅需要10条数据,但是我一次读出来...
《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者和信息检索爱好者的...
Lucene表达式查询是基于Analyzer和QueryParser实现的,它们负责将用户的输入转换为可执行的查询对象。Analyzer用于分词,QueryParser则解析这些词汇并生成对应的查询结构。这种查询方式提供了更大的灵活性和精确性,...
lucene 做索引查询流程,来自《lucene in action》
本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...
### 二、查询索引 查询索引包括以下步骤: 1. **打开索引目录**:与创建索引类似,先打开索引所在的目录。 2. **创建分词器**:同样需要一个分词器来处理查询字符串。 3. **创建索引读取器**:`IndexReader`用于...
2. **查询解析**:Lucene提供了`QueryParser`类用于将用户输入的文本转换为查询对象。3.0.3版本中,你可以了解到标准查询解析器的工作原理,以及如何自定义查询解析规则。 3. **搜索执行**:通过`Searcher`类,你...
在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...
lucene插件中 docemenu和任意对象的转换
Analyzer负责将输入文本分解为可搜索的词项,IndexWriter则用于创建或更新索引,Directory是存储索引的接口,Document用来封装待索引的信息,而QueryParser则将用户输入的查询字符串转化为Lucene能理解的查询对象。...
查询阶段,用户输入查询字符串,Lucene将这个字符串转换为查询对象,然后与索引进行匹配。查询操作通常包括以下步骤: - 查询分析(Query Parsing):将用户的输入转换为查询语法,可能涉及短语查询、布尔查询等。 ...