• Lucene搜索过程的核心类


    IndexReader

            搜索由IndexWriter类创建的索引

    Term

            搜索功能的基本单元,与Filed类似, Term 包括域名和单词 (Filed 包含域名和句子)

    Query

    TermQuery

    TopDocs

      是一个简单的指针容器,一般指向前N个排名的搜索结果

    ///////////////////////////////////////////////////////////////////////

    搜索是一个比较重要的过程,可以根据不同的条件查询出不同的结果

    Lucene提供了好多方法进行搜索

    4.x 以后的改了好多

       像我们比较常用的

         QueryParser parser =new QueryParser(Version.LUCENE_31, "content", analyzer);

       这个类就没有了,我们可以用BooleanQuery来替代他 ,等等。

      具体 详细方法如下:

    (1)通过项(TermQuery)类进行搜索

    private void search() {
            try{
            String field = "D://index";
            Directory dir = FSDirectory.open(new File(field));
            IndexReader reader = DirectoryReader.open(dir);
            IndexSearcher searcher = new IndexSearcher(reader);
    //        BooleanQuery booleanQuery = new BooleanQuery();
            
            Term term = new Term("content" ,"你");
            Query query = new TermQuery(term);
    //        Term term1 = new Term("content" ,"好吧");
    //        Query query1 = new TermQuery(term1);
    //        booleanQuery.add(query, Occur.SHOULD);
    //        booleanQuery.add(query1,Occur.SHOULD);
    //        TermQuery query = new TermQuery(term);
            TopDocs topdocs = searcher.search(query, 100);
            ScoreDoc[] scoreDocs = topdocs.scoreDocs;
            System.out.println("查询结果总数---" + topdocs.totalHits+"最大的评分--"+topdocs.getMaxScore());  
            for(int i=0; i < scoreDocs.length; i++) {  
                int doc = scoreDocs[i].doc;  
                Document document = searcher.doc(doc);  
                System.out.println("content===="+document.get("content"));  
                System.out.println("id--" + scoreDocs[i].doc + "---scors--" + scoreDocs[i].score+"---index--"+scoreDocs[i].shardIndex);  
            }  
            reader.close();  
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    需要注意的是这个查询方法对查询词的大小写敏感的,所以如果你的数据是对大小写很敏感的话,建议使用此方法,不过得选好合适的分词器

    不要在建立索引的时候将大小写统一了。

    (2) 通过指定项的范围进行查询( TermRangeQuery)

        private void search() {
            try{
            String field = "D://index";
            Directory dir = FSDirectory.open(new File(field));
            IndexReader reader = DirectoryReader.open(dir);
            IndexSearcher searcher = new IndexSearcher(reader);
    //        BooleanQuery booleanQuery = new BooleanQuery();
            TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange("id", "0", "1", true, true);
    //        Term term = new Term("content" ,"你");
    //        Query query = new TermQuery(term);
    //        Term term1 = new Term("content" ,"好吧");
    //        Query query1 = new TermQuery(term1);
    //        booleanQuery.add(query, Occur.SHOULD);
    //        booleanQuery.add(query1,Occur.SHOULD);
    //        TermQuery query = new TermQuery(term);
            TopDocs topdocs = searcher.search(termRangeQuery, 100);
            ScoreDoc[] scoreDocs = topdocs.scoreDocs;
            System.out.println("查询结果总数---" + topdocs.totalHits+"最大的评分--"+topdocs.getMaxScore());  
            for(int i=0; i < scoreDocs.length; i++) {  
                int doc = scoreDocs[i].doc;  
                Document document = searcher.doc(doc);  
                System.out.println("content===="+document.get("content"));  
                System.out.println("id--" + scoreDocs[i].doc + "---scors--" + scoreDocs[i].score+"---index--"+scoreDocs[i].shardIndex);  
            }  
            reader.close();  
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    该程序查询了id是 0 到1 的索引,true 表示包含边界的意思

    (3)

  • 相关阅读:
    CXF.bat
    终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)
    DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)
    Delphi体系内部的4种消息传递办法(Send,Post,Perform,Dispatch)
    delphi高手突破之异常及错误处理
    Android 短信模块分析(三) MMS入口分析
    delphi如何加上spliter分割条,任意调整大小
    浅拷贝与深度拷贝(原型模式)
    delphi高手突破学习笔记之面向对象类和对象的本质(有汇编解释 good)
    delphi模态窗体最小化会隐藏的问题
  • 原文地址:https://www.cnblogs.com/tomcattd/p/2889473.html
Copyright © 2020-2023  润新知