zoukankan      html  css  js  c++  java
  • Lucene入门与使用(2)转

    Lucene入门与使用(2)
    2008-04-07 17:35
    5. 利用Lucene进行检索


    5.1 一段简单的检索代码

        //需要捕捉IOException,ParseException异常
        //处理检索条件
        Query query = QueryParser.parse("入门", "text", analyzer);

        //检索
        Searcher searcher = new IndexSearcher("./index");//"index"指定索引文件位置
    Hits hits = searcher.search(query);

        //打印结果值集
        for (int i = 0; i < hits.length(); i++) {
          doc = hits.doc(i);
          String id = doc.get("id");
          System.out.println("found " + "入门" + " on the id:" + id);
    }

    5.2 利用Lucene的检索接口


    5.2.1 Query与QueryParser


            主要使用方法:
    QueryParser .parse(String query, String field, Analyzer analyzer),例如:
    Query query = QueryParser.parse("入门", "text", analyzer);
    "入门"为检索词, "text"为检索的字段名, analyzer为分析器


    5.2.2 Hits与Searcher


           Hits的主要使用接口:

    接口名

    备注

    Doc(int n)

    返回第n个的文档的所有字段

    length()

    返回这个集中的可用个数


    6. Lucene的其他使用


    6.1 Lucene 的索引修改


            下面给出一段修改索引的代码,请根据Lucene的API解读:


    /**
       * 对已有的索引添加新的一条索引
       * @param idStr String:要修改的id
       * @param doc Document:要修改的值
       */
    public void addIndex(String idStr, String valueStr) {
        StandardAnalyzer analyzer = new StandardAnalyzer();
        IndexWriter writer = null;
        try {
          writer = new IndexWriter(indexPath, analyzer, false);
          writer.mergeFactor = 2; //修正lucene 1.4.2 bug,否则不能准确反映修改

              Document doc = new Document();
              doc.add(Field.UnIndexed("id", idStr));//“id”为字段名,“1”为字段值
              doc.add(Field.Text("text", valueStr));
          writer.addDocument(doc);

          writer.optimize();
          writer.close();
        }
        catch (IOException ioe) {
          ioe.printStackTrace();
        }
    }

    /**
       * 删除索引
       *
       * @param idStr String
       */
    public void deleteIndex(String idStr) {
        try {
          Directory dirt = FSDirectory.getDirectory(indexPath, false);
          IndexReader reader = IndexReader.open(dirt);
          IndexXML.deleteIndex(idStr, reader);
          reader.close();
          dirt.close();
        }
        catch (IOException ioe) {
          ioe.printStackTrace();
        }
    }


    6.2 Lucene 的检索结果排序


            Lucene的排序主要是对org.apache.lucene.search.Sort的使用。Sort可以直接根据字段Field生成,也可以根据标 准的SortField生成,但是作为Sort的字段,必须符合以下的条件:唯一值以及Indexed。可以对Integers, Floats, Strings三种类型排序。
            对整数型的ID检索结果排序只要进行以下的简单操作:

    Sort sort = new Sort("id");
    Hits hits = searcher.search(query, sort);

           用户还可以根据自己定义更加复杂的排序,详细请参考API。


    7 总结


            Lucene给java的全文索引检索带来了非常强大的力量,以上仅对Lucene进行简单的入门说明。

    参考资料:
    1. Overview (Lucene 1.4-final API)
    2. 车东 《在应用中加入全文检索功能--基于JAVA的全文索引引擎Lucene简介》

  • 相关阅读:
    怎样搭建PHP开发环境
    求教Sublime Text2 SublimeLinter插件安装问题
    借助 SublimeLinter 编写高质量的 JavaScript & CSS 代码
    sublime 支持php语法错误提示的插件
    sublime text 2 配置php调试环境
    解决file_get_contents无法请求https连接的方法
    JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别
    JavaSE(五)JAVA对象向上转型和向下转型
    JavaSE(四)之接口、访问控制
    JavaSE(二)之继承、封装、多态
  • 原文地址:https://www.cnblogs.com/goooto/p/1158828.html
Copyright © 2011-2022 走看看