`
sassds
  • 浏览: 153104 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene QueryParser用法示例

 
阅读更多

  1. package demo.first;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.Date;   
  5.   
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;   
  7. import org.apache.lucene.document.Document;   
  8. import org.apache.lucene.document.Field;   
  9. import org.apache.lucene.index.CorruptIndexException;   
  10. import org.apache.lucene.index.IndexWriter;   
  11. import org.apache.lucene.queryParser.QueryParser;   
  12. import org.apache.lucene.search.Hits;   
  13. import org.apache.lucene.search.IndexSearcher;   
  14. import org.apache.lucene.search.Query;   
  15. import org.apache.lucene.search.Searcher;   
  16. import org.apache.lucene.store.LockObtainFailedException;   
  17.   
  18. public class TestQueryParser {   
  19.   
  20.     public static void main(String[] args) throws CorruptIndexException, IOException {   
  21.         String path = "D://workspace//fwk//lucenedemo//firstLuceneIndex";   
  22.         TestQueryParser tqp = new TestQueryParser();   
  23.         tqp.createIndex(path);   
  24.         Searcher search = tqp.getSearcher(path);   
  25.         System.out.println("#_2");   
  26.         tqp.testTime(search, tqp.getQueryParser2());   
  27.         System.out.println("#_1");   
  28.         tqp.testTime(search, tqp.getQueryParser1());   
  29.         System.out.println("#_3");   
  30.         tqp.testTime(search, tqp.getQueryParser3());   
  31.         System.out.println("#_4");   
  32.         tqp.testTime(search, tqp.getQueryParser4());   
  33.         System.out.println("#_5");   
  34.         tqp.testTime(search, tqp.getQueryParser5());   
  35.         System.out.println("#_6");   
  36.         tqp.testTime(search, tqp.getQueryParser6());   
  37.         System.out.println("#_7");   
  38.         tqp.testTime(search, tqp.getQueryParser7());   
  39.     }   
  40.        
  41.     public void testTime(Searcher search,Query query) throws IOException{   
  42.         Date start = new Date();   
  43.         Hits hits = search.search(query);   
  44.         for (int i = 0; i < hits.length(); i++) {   
  45.             System.out.println(hits.id(i));   
  46.             System.out.println(hits.doc(i));   
  47.             System.out.println(hits.score(i));   
  48.         }   
  49.            
  50.         System.out.println("本次搜索用时:" + ((new Date()).getTime() - start.getTime()) + "毫秒");   
  51.            
  52.     }   
  53.        
  54.     public Searcher getSearcher(String path) throws CorruptIndexException, IOException{   
  55.             return new IndexSearcher(path);   
  56.     }   
  57.        
  58.     public Query getQueryParser1(){   
  59.         //默认搜索字段   
  60.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  61.         try {   
  62.             return queryParser.parse("搜索 - 擎");   
  63.         } catch (Exception e) {   
  64.             e.printStackTrace();   
  65.         }   
  66.         return null;   
  67.     }   
  68.        
  69.     public Query getQueryParser2(){   
  70.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  71.         try {   
  72.             return queryParser.parse("欢迎");   
  73.         } catch (Exception e) {   
  74.             e.printStackTrace();   
  75.         }   
  76.         return null;   
  77.     }   
  78.        
  79.     public Query getQueryParser3(){   
  80.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  81.         try {   
  82.             return queryParser.parse("搜索 and 擎");   
  83.         } catch (Exception e) {   
  84.             e.printStackTrace();   
  85.         }   
  86.         return null;   
  87.     }   
  88.        
  89.     public Query getQueryParser4(){   
  90.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  91.         try {   
  92.             //content字段搜索 索引   title字段搜寻 你好   
  93.             return queryParser.parse("索引 title:你好");   
  94.         } catch (Exception e) {   
  95.             e.printStackTrace();   
  96.         }   
  97.         return null;   
  98.     }   
  99.        
  100.     public Query getQueryParser5(){   
  101.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  102.         //允许使用正则表达式方式   
  103.         queryParser.setAllowLeadingWildcard(true);   
  104.         try {   
  105.             return queryParser.parse("*索*");   
  106.         } catch (Exception e) {   
  107.             e.printStackTrace();   
  108.         }   
  109.         return null;   
  110.     }   
  111.     /**  
  112.      * 采用标准分词器StandardAnalyzer会在创建索引的时候把存入的英文全部换成小写放在索引中 查询的时候也会将查询的关键词转为小写进行查询  
  113.      * @return  
  114.      */  
  115.     public Query getQueryParser6(){   
  116.         QueryParser queryParser = new QueryParser("testCapital"new StandardAnalyzer());   
  117.         try {   
  118.             return queryParser.parse("hellOwangzi");   
  119.         } catch (Exception e) {   
  120.             e.printStackTrace();   
  121.         }   
  122.         return null;   
  123.     }   
  124.        
  125.     /**  
  126.      * 采用标准分词器StandardAnalyzer会在创建索引的时候把存入的and or等关键字过滤掉 所以在查询的时候怎么也查不到  
  127.      * @return  
  128.      */  
  129.     public Query getQueryParser7(){   
  130.         QueryParser queryParser = new QueryParser("testAndOr"new StandardAnalyzer());   
  131.         try {   
  132.             //return queryParser.parse("and");   
  133.             return queryParser.parse("test");   
  134.         } catch (Exception e) {   
  135.             e.printStackTrace();   
  136.         }   
  137.         return null;   
  138.     }   
  139.     /**  
  140.      * 创建索引  
  141.      * @param path  
  142.      */  
  143.     public void createIndex(String path){   
  144.         try {   
  145.             IndexWriter writer = new IndexWriter(path,new StandardAnalyzer(),true);   
  146.             Document docA = new Document();   
  147.             //相当于数据库中列的概念,因此第一个参数是列名,第二个参数是列的值,最后两个参数是enum类型的(JDK1.5),对创建的索引的设置   
  148.             //Field.Store 是否覆盖原来的索引文件,而不是重新建一个   
  149.             Field fieldA = new Field("content","搜索引擎",Field.Store.YES,Field.Index.TOKENIZED);   
  150.             //我们把列(fieldA)加到某一行(docA)中   
  151.             docA.add(fieldA);   
  152.                
  153.             docA.add(new Field("title","你好中国",Field.Store.YES,Field.Index.TOKENIZED));   
  154.             docA.add(new Field("content","欢迎你llying",Field.Store.YES,Field.Index.TOKENIZED));   
  155.             docA.add(new Field("lastModifyTime","2008-9-17",Field.Store.YES,Field.Index.TOKENIZED));   
  156.             docA.add(new Field("testCapital","HelloWangzi",Field.Store.YES,Field.Index.TOKENIZED));   
  157.             docA.add(new Field("testAndOr","test and",Field.Store.YES,Field.Index.TOKENIZED));   
  158.                
  159.             Document docB = new Document();   
  160.             //相当于数据库中列的概念,因此第一个参数是列名,第二个参数是列的值,最后两个参数是enum类型的(JDK1.5),对创建的索引的设置   
  161.             Field fieldB = new Field("content","创建索引",Field.Store.YES,Field.Index.TOKENIZED);   
  162.             //我们把列(fieldA)加到某一行(docA)中   
  163.             docB.add(fieldB);   
  164.             docB.add(new Field("title","你好世界",Field.Store.YES,Field.Index.TOKENIZED));   
  165.             docB.add(new Field("content","欢迎加入jee高级开发群46176507",Field.Store.YES,Field.Index.TOKENIZED));   
  166.             docB.add(new Field("lastModifyTime","2008-9-6",Field.Store.YES,Field.Index.TOKENIZED));   
  167.             docB.add(new Field("testCapital","hellowangZi",Field.Store.YES,Field.Index.TOKENIZED));   
  168.             docB.add(new Field("testAndOr","test or",Field.Store.YES,Field.Index.TOKENIZED));   
  169.                
  170.             writer.addDocument(docA);   
  171.             writer.addDocument(docB);   
  172.                
  173.             //如果对海量数据进行创建索引的时候,需要对索引进行优化,以便提高速度   
  174.             writer.optimize();   
  175.                
  176.             //跟数据库类似,打开一个连接,使用完后,要关闭它   
  177.             writer.close();   
  178.         } catch (CorruptIndexException e) {   
  179.             e.printStackTrace();   
  180.         } catch (LockObtainFailedException e) {   
  181.             e.printStackTrace();   
  182.         } catch (IOException e) {   
  183.             e.printStackTrace();   
  184.         }   
  185.     }   
  186.   
  187. }  

分享到:
评论

相关推荐

    lucene 站内搜索示例

    使用 `QueryParser` 构建用户输入的查询语句,然后调用 `search(Query, Collector)` 方法进行搜索。`Collector` 用于收集匹配的结果。 5. **结果排序与展示**:根据相关性对搜索结果进行排序,可以使用 `ScoreDoc` ...

    Lucene.Net基本用法

    ### Lucene.Net基本用法详解 #### 一、概述 Lucene.Net是.NET平台上的一款高性能全文搜索引擎库,基于Java版的Lucene开发而来。它提供了强大的文本搜索功能,支持复杂查询,广泛应用于文档检索、网站搜索等场景。...

    盘古分词、lucene3.0.3搜索的使用示例.zip

    4. **查询执行**:构建Query对象,根据用户输入的查询字符串,使用QueryParser解析成Lucene能理解的查询表达式。然后通过IndexSearcher对象执行查询,获取匹配的Document结果。 5. **结果展示**:对查询结果进行...

    lucene3 例子

    7. **实用工具类**:可能介绍了Directory、IndexReader、IndexWriter等关键类的使用方法,以及如何进行索引的读写操作。 8. **实战示例**:博主可能通过一个具体的案例,演示了从创建索引到执行搜索的完整流程,...

    Lucene 全文检索的 各种例子

    在`lucene-test-master`这个压缩包中,我们可以期待找到一系列示例代码,演示如何使用上述步骤和不同分词器来实现Lucene的全文检索功能。这些示例将有助于开发者理解如何在实际项目中集成和调整Lucene,以满足特定的...

    IK分词器集成lucene4.5使用方法

    QueryParser parser = new QueryParser("content", analyzer); Query query = parser.parse("关键词"); TopDocs topDocs = searcher.search(query, 10); ``` 5. **自定义词典**:如果需要自定义词典,可以将自定义...

    Lucene简单实例记录

    从给定的文件信息中,我们可以提取出关于Apache Lucene的基本使用和实例的详细知识点,以下是对这些知识点的深入解析: ### Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写,提供了对...

    Lucene 4.8全文检索引擎入门示例文档

    使用 IndexSearcher 和 QueryParser 创建查询,QueryParser 可以将用户的输入转换为 Lucene 查询表达式。执行搜索后,会得到一个 TopDocs 对象,其中包含了匹配的文档及其评分。 4. **展示结果** 从 TopDocs 中...

    lucene示例代码

    通过上述示例,我们可以看到 Lucene 的基本用法,包括创建索引、添加文档以及执行搜索。实际项目中,Lucene 还可以与其他技术结合,如 Solr 或 Elasticsearch,以实现更复杂、更高效的企业级搜索引擎解决方案。了解...

    Lucene3.1使用教程

    3. **搜索索引**:创建`IndexSearcher`对象,然后使用`QueryParser`解析用户输入的查询字符串,生成查询对象。 4. **执行查询**:调用`IndexSearcher`的`search()`方法执行查询,返回匹配的文档集。 5. **结果排序...

    lucene搜索的简单入门例子源代码

    首先创建一个`QueryParser`,指定要搜索的字段和分词器,然后用`parse(String query)`方法解析用户输入的查询字符串。接着,用`IndexSearcher`的`search(Query query, int n)`方法查找前n个匹配的文档。 6. **获取...

    Lucene入门示例

    本示例将帮助初学者理解Lucene的基本用法,以及如何在实际项目中应用。 **一、Lucene的主要组件** 1. **索引(Index)**:Lucene的核心是构建索引,它将文本数据转换为可快速搜索的结构。索引过程包括分析、词项化...

    Lucene建立索引及查询包含“java”关键字 示例代码

    这个示例代码将向我们展示如何使用Lucene来创建一个索引,并执行一个包含"java"关键字的查询。 首先,我们需要导入必要的Lucene库,包括核心类库和其他可能需要的模块,例如分析器(Analyzer)和文档(Document)...

    lucene全文检索简单索引和搜索实例

    3. 构建查询:使用QueryParser或者QueryBuilder创建查询对象,指定查询字段和查询字符串。 4. 执行搜索:调用IndexSearcher的search方法,传入查询对象和TopDocs参数,获取匹配的文档及其分数。 5. 处理结果:遍历...

    Lucene资料大全(包括Lucene_in_Action书等)

    特别提到了"尚学堂科技_张志宇_lucene.ppt",这可能是一个由尚学堂科技的张志宇制作的Lucene讲解PPT,通常这样的PPT会以简洁明了的方式介绍Lucene的基本概念、使用方法和实战技巧。 **Lucene核心知识点** Apache ...

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

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

    Lucene时间区间搜索

    在C#中,我们可以使用Apache.Lucene.Net库来操作Lucene。创建索引时,我们需要将包含时间戳的文档字段(如"created_at"或"modified_date")存储并分词,以便后续查询。分词是为了让Lucene能够理解时间值,并将其与...

    Lucene常用的Demo

    在Lucene项目中,通常会包含许多示例代码,这些代码覆盖了从基础到进阶的各种用法。通过查看这些代码,你可以学习如何使用`TokenStream`进行自定义的文本分析,以及如何利用`TermQuery`、`BooleanQuery`和`...

    Lucene3.3.0学习Demo

    - `QueryParser`的用法,演示如何从用户输入构建`Query`对象。 - `IndexSearcher`的使用,包括执行查询、获取`TopDocs`(匹配文档的集合)以及`ScoreDoc`对象。 - 结果排序的示例,可能包含如何自定义`Sort`对象以...

Global site tag (gtag.js) - Google Analytics