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

lucene in action笔记之二搜索基础

    博客分类:
  • java
阅读更多

一、简单的搜索程序

  1. 主要搜索的类:1) IndexSearcher     搜索操作入口,所有的搜索操作都是通过IndexSearcher实例使用一个重载的search方法来实现。        2)Query及其子类   具体的Query子类为每一种特定类型的查询进行了逻辑上的封装。Query实例被传递到IndexSearchsearch方法中               3) QueryParser    将用户输入的(并且可读的)查询表达式处理为一个具体的Query对象             4) Hits    提供对搜索结果的访问。Hits对象由search方法返回
  2. 使用QueryParser解析查询表达式: 1)QueryParser是程序的搜索部分中唯一需要使用分析器的类。 2)如果解析不成功会抛出ParseException,程序应该能有效处理。  
  3. 使用IndexSearcher    1)推荐通过Directory对象构造IndexSearcher实例     2)FsDirectory.getDirectory(indexDir,  false) 的最后一个参数false表示我们希望打开的是一个已经存在的索引而非构造一个新的索引。    3)注意:IndexSearcher实例只搜索在他被实例化时已存在的索引。如果制作索引和搜索并发进行,那么最新你索引的文档对搜索来说是不可见的。
  4. 建议不要调用Hits类的doc(n)、id(n)和score(n)方法。因为这些方法需要在文档还没有被放入缓存之前就将器从索引中读取出来。

二、Lucene评分机制

  1. Explanation对象的内部包含了所有关于评分计算中各个因子的细节信息。

三、Query对象

  1. QueryParser类中的静态方法parse(String query, String field, Analyzer analyzer)内部运作:该静态方法在函数内部传建了一个QueryParser实例,并调用了该实例的parse(String query)方法。
  2. TempQuery 
    public void testTerm() throws Exception {
        IndexSearcher searcher = new IndexSearcher(directory);
        Term t = new Term("subject", "ant");
        //"subject"是域名,"ant"是查询项的值
       Query query = new TermQuery(t);
        Hits hits = searcher.search(query);
        assertEquals("JDwA", 1, hits.length());
    
        t = new Term("subject", "junit");
        hits = searcher.search(new TermQuery(t));
        assertEquals(2, hits.length());
    
        searcher.close();
      }
             1)注意:查询项的值是区分大小写的。此外,由于不同的分词器的索引方式都不同,所以对原文的搜索可能还有其它问题。   2)TempQuery类在根据关键字(即通过Field.Keyword()索引过的关键字)查询文档时显得特别有用。    3)如果单个单词作为查询表达式,QueryParse的parse()函数将返回一个TermQuery对象。这个单词就相当于一个单独的项。
  3. RangeQuery
     RangeQuery query = new RangeQuery(begin, end, true);
    //begin、end均为项Term
    //true 指明搜索边界包含在搜索范围之内,反之为false
     IndexSearcher searcher = new IndexSearcher(directory);
     QueryParser可用[起始 To 终止]或{起始 To 终止}表达式来构造。前者边界包含在搜索范围,后者反之。
  4. PrefixQuery
  5. BooleanQuery
  6. PhraseQuery
  7. WildcardQuery
  8. FuzzyQuery

四、解析查询表达式 QueryParser

    分享到:
    评论
    1 楼 laitaogood 2008-03-13  
    支持楼主,以后多出点这样的教程啊,小弟正在学习中呢~~~~

相关推荐

    Lucene In Action ch 5 笔记 --高级搜索技术

    《Lucene In Action》是关于Apache Lucene搜索引擎库的一本权威书籍,第五章主要探讨了高级搜索技术。在这个章节中,作者深入介绍了如何利用Lucene实现更为复杂和精确的搜索功能,以满足不同用户的需求。以下是对这...

    基于lucene和nutch的开源搜索引擎资料集合

    JAVA_Lucene_in_Action教程完整版.doc Java开源搜索引擎.doc Linux下Nutch分布式配置和使用.pdf Lucene+Nutch源码.rar Lucene学习笔记.doc nutch_tutorial.pdf nutch二次开发总结.txt nutch入门.pdf nutch入门学习....

    lucene笔记

    - "Lucene in Action"书籍: 一本深入介绍Lucene的书籍,适合初学者和进阶者。 - Stack Overflow: 解决Lucene实际问题的好地方,有很多实战经验分享。 总的来说,Lucene提供了一套强大的文本检索工具,通过理解它的...

    lucene学习笔记

    随着熟练度的提升,可以阅读更深入的书籍,如《Lucene in Action》等,了解其内部机制和高级特性。 总结来说,Lucene是一个强大的全文检索工具,通过掌握其基本概念和操作,开发者可以构建高效、灵活的搜索功能,为...

    SSH mybatis springmvc lucene Jquery oracle等笔记总结.docx

    Lucene是Apache软件基金会的全文搜索引擎库,可用于Java应用中实现高效的文本搜索功能。它可以集成到Spring或Struts2等框架中,提供强大的文本检索能力。 这些技术的整合使用,能够构建出高效、可维护的企业级Web...

    搜索引擎与信息获取技术和搜索笔记

    提到具体的书籍资源,"Lucene in Action.pdf" 是一本关于Apache Lucene的权威指南。Lucene是一个开源的全文搜索引擎库,广泛应用于各种搜索应用的开发。这本书会详细介绍如何使用Lucene构建高效的搜索引擎,包括索引...

    JAVA笔记JAVA笔记.docx

    - Lucene是一个高性能的全文搜索引擎库,它能够快速地建立索引并搜索文档。 #### 测试框架Junit - **Junit与Hamcrest兼容性问题**: - 如果遇到`java.lang.SecurityException`错误,可能是由于不同包之间的类...

    Elastic Search学习笔记

    Elasticsearch 是一个基于 Lucene 的搜索引擎,它提供了丰富的功能用于搜索、分析和存储数据。本篇学习笔记将围绕 Elasticsearch 的基本查询操作展开,包括前置过滤、查询与排序以及统计功能。 #### 二、查询基础 ...

    JavaEE程序员简历最新版

    在悦科普CRM项目中,他实践了 Dao、Service 和 Action 层的职责划分,强调了在Service层进行详细判断以确保稳定性。在广东科学中心商城项目中,他负责了产品管理、前端展示、购物车、用户管理和在线支付等功能的开发...

Global site tag (gtag.js) - Google Analytics