lucene优化

查询lucene结果集的分数

public static void testSearcher(String keywords) throws Exception{
        IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
        //需要根据那几个字段进行检索...
        String   fields []={"title"};

        QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getMatchVersion(),fields,LuceneUtils.getAnalyzer());
        Query query=queryParser.parse(keywords);

        //检索符合query 前面N条记录...
        TopDocs topDocs=indexSearcher.search(query, 100);
        ScoreDoc scoreDocs []=topDocs.scoreDocs;

        for(ScoreDoc scoreDoc:scoreDocs){
            //VSM
            Document document=indexSearcher.doc(scoreDoc.doc);

            System.out.println("文档编号,id"+document.get("id") +"====得分===="+scoreDoc.score);

        }



    }

排序优化


        //索引在硬盘里面...
                Directory directory1=FSDirectory.open(new File(Contants.INDEXURL));

                IOContext ioContext=new IOContext();

                //索引放在内存当中...
                Directory directory=new RAMDirectory(directory1,ioContext);

                IndexReader indexReader=DirectoryReader.open(directory);


                IndexSearcher indexSearcher=new IndexSearcher(indexReader);

                String fields []={"title"};

                QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getMatchVersion(),fields,LuceneUtils.getAnalyzer());
                //不同的规则构造不同的子类..
                //title:keywords  ,content:keywords
                Query query=queryParser.parse("抑郁症");

                Sort sort=new Sort();

                //升序
                //SortField sortField=new SortField("id", Type.INT);
                //降序                
                SortField sortField=new SortField("id", Type.INT,true);

                //设置排序的字段...
                sort.setSort(sortField);


                TopDocs topDocs=indexSearcher.search(query,100,sort);

                for(ScoreDoc scoreDoc:topDocs.scoreDocs){
                    Document document=indexSearcher.doc(scoreDoc.doc);
                    System.out.println(document.get("id"));

                }

过滤


        //索引在硬盘里面...
                Directory directory1=FSDirectory.open(new File(Contants.INDEXURL));

                IOContext ioContext=new IOContext();

                //索引放在内存当中...
                Directory directory=new RAMDirectory(directory1,ioContext);

                IndexReader indexReader=DirectoryReader.open(directory);


                IndexSearcher indexSearcher=new IndexSearcher(indexReader);

                String fields []={"title"};

                QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getMatchVersion(),fields,LuceneUtils.getAnalyzer());
                //不同的规则构造不同的子类..
                //title:keywords  ,content:keywords
                Query query=queryParser.parse("抑郁症");

                /**
                 * 1:需要根据那个字段进行过滤
                 * 
                 * 
                 * 2:字段对应的最小值
                 * 
                 * 3:字段对应的最大值
                 * 
                 * 4:是否包含最小值
                 * 
                 * 5:是否包含最大值...
                 * 
                 * 
                 */
                //filter  是一个抽象类,定义不同的filter 相当于是不同的过滤规则...
                Filter filter=NumericRangeFilter.newIntRange("id", 1, 10, false, true);


                TopDocs topDocs=indexSearcher.search(query,filter,100);

                for(ScoreDoc scoreDoc:topDocs.scoreDocs){
                    Document document=indexSearcher.doc(scoreDoc.doc);
                    System.out.println(document.get("id"));

                }

查询

public class TestQuery {
        public static void main(String[] args) throws Exception {

            //testQuery();
            //第一种查询,TermQuery 
//          Query query=new TermQuery(new Term("author","毕加索"));



            //第二种查询:字符串搜索..
//          String fields []={"author"};
//          
//          QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getMatchVersion(),fields,LuceneUtils.getAnalyzer());
//          Query query=queryParser.parse("毕加索");
//          
//          //author:毕  author:加


            //第三种查询:查询所有..
//          Query query=new MatchAllDocsQuery();

            //第四种查询:范围查询,可以使用此查询来替代过滤器...
            //我们完成一种需求有两种方式,我们推荐用这种...性能比filter要高

//          Query query=NumericRangeQuery.newIntRange("id", 1, 10, true, true);


            //第五种查询:通配符。。。
            //?代表单个任意字符,* 代表多个任意字符...
//          Query query=new WildcardQuery(new Term("title", "luce*"));


            //第六种查询:模糊查询..。。。
            //author String 
            /**
             * 1:需要根据查询的条件
             * 
             * 
             * 2:最大可编辑数  取值范围0,1 ,2
             * 允许我的查询条件的值,可以错误几个字符...
             * 
             */
            Query query=new FuzzyQuery(new Term("author", "爱新觉罗杜小"),1);
            testQuery(query);
        }


        public static void testQuery(Query query) throws Exception{
            IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
            TopDocs topDocs=indexSearcher.search(query,100);
            for(ScoreDoc scoreDoc:topDocs.scoreDocs){
                Document document=indexSearcher.doc(scoreDoc.doc);
                System.out.println(document.get("id"));
                System.out.println(document.get("title"));
                System.out.println(document.get("content"));
                System.out.println(document.get("author"));
                System.out.println(document.get("link"));
            }


        }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值