`

lucene之sort

阅读更多
package cn.zqh.lucene.sort;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.NumberTools;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RangeFilter;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;

import cn.zqh.lucene.highlight.QueryResult;

/**
zqh
*/
public class TestSort {
String indexPath ="D:\\p\\luceneDemo\\luceneIndex";
Analyzer analyzer = new StandardAnalyzer();

//相关度排序
public QueryResult search(String queryString,int firstResult,int maxResult) throws ParseException, IOException{
        IndexSearcher indexSearcher = null;
      
      
        //方法1.在搜索的时候指定Field的相关值        方法2.创建索引时指定Document的相关值 doc.setBoost();
   String[] fields={"name","content"};
   Map<String,Float> boots = new HashMap<String,Float>();
   boots.put("name", 3f);//boots.put("name", 1f);默认
   QueryParser queryParser = new MultiFieldQueryParser(fields,analyzer,boots);
   Query query =queryParser.parse(queryString);
 
 
   //2、进行查询
     indexSearcher = new IndexSearcher(indexPath);
   Filter filter = null;
   TopDocs top =indexSearcher.search(query, filter, 10000);
 
     int recordCount = top.totalHits;
     List<Document> recordList = new ArrayList<Document>();
   
     //准备高亮
     Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
     Scorer scorer = new QueryScorer(query);
     Highlighter hg = new Highlighter(formatter,scorer);
     Fragmenter fragmenter = new SimpleFragmenter(50);
     hg.setTextFragmenter(fragmenter);
   
   
   
     //3取出当前页的数据
     int end = Math.min(firstResult+maxResult,top.totalHits);
     for(int i=firstResult;i< end;i++){
     ScoreDoc scoreDoc =top.scoreDocs[i];
     int docSn =scoreDoc.doc;
     Document doc = indexSearcher.doc(docSn);
   
     //返回高亮后的结果,如果当前属性值中没有出现关键字,会返回null
     String hc =hg.getBestFragment(analyzer,"content",doc.get("content"));
   
     if(hc ==null){
        String content =doc.get("content");
        int endIndex = Math.min(50,content.length());
        hc = content.substring(0,50);
     }
     doc.getField("content").setValue(hc);
   
     recordList.add(doc);
     }
     //返回结果
     return new QueryResult(recordCount,recordList);
     //indexSearcher.close();
}

//自定义排序
public QueryResult search(Query query,int firstResult,int maxResult) throws ParseException, IOException{
        IndexSearcher indexSearcher = null;
 
     indexSearcher = new IndexSearcher(indexPath);
   
     //使用过滤器
   Filter filter = new RangeFilter("size", NumberTools.longToString(200), NumberTools.longToString(500), true, true);
 
   //自定义排序
   Sort sort = new Sort();
   sort.setSort(new SortField("size"));//默认升序
   TopDocs top =indexSearcher.search(query, filter, 10000);
 
     int recordCount = top.totalHits;
     List<Document> recordList = new ArrayList<Document>();
   
     //准备高亮
     Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
     Scorer scorer = new QueryScorer(query);
     Highlighter hg = new Highlighter(formatter,scorer);
     Fragmenter fragmenter = new SimpleFragmenter(50);
     hg.setTextFragmenter(fragmenter);
   
   
   
     //3取出当前页的数据
     int end = Math.min(firstResult+maxResult,top.totalHits);
     for(int i=firstResult;i< end;i++){
     ScoreDoc scoreDoc =top.scoreDocs[i];
     int docSn =scoreDoc.doc;
     Document doc = indexSearcher.doc(docSn);
   
     //返回高亮后的结果,如果当前属性值中没有出现关键字,会返回null
     String hc =hg.getBestFragment(analyzer,"content",doc.get("content"));
   
     if(hc ==null){
        String content =doc.get("content");
        int endIndex = Math.min(50,content.length());
        hc = content.substring(0,50);
     }
     doc.getField("content").setValue(hc);
   
     recordList.add(doc);
     }
     //返回结果
     return new QueryResult(recordCount,recordList);
     //indexSearcher.close();
}
}
分享到:
评论

相关推荐

    Lucene5学习之排序-Sort

    NULL 博文链接:https://iamyida.iteye.com/blog/2197839

    LUCENE搜索引擎基本工作原理

    LUCENE搜索引擎基本工作原理 详细介绍了搜索引擎的工作原理

    Lucene查询工具LQT.zip

    Lucene Query Tool (lqt) 是... --sort-fields sort fields within document --suppress-names suppress printing of field names --tabular print tabular output (requires --fields with no multivalued fields)

    lucene基础介绍

    主要介绍lucene建立索引、搜索中sort、query等对象的使用、搜索性能的优化、索引各个文件的主要存储的内容等。

    java Lucene 中自定义排序的实现

    Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    5.1. Sort类 14 5.2. SortField类 14 5.3. 指定排序的法则 15 5.3.1. 按照文档的得分降序排序 15 5.3.2. 按文档的内部ID升序排序 15 5.3.3. 按照一个Field来排序 15 5.3.4. 按照多个Field来排序 15 5.3.5. 改变...

    paoding-analysis4.3.0.jar

    paoding-analysis4.3.0.jar,可以配合目前最新的lucene-4.3.0,sort-4.3.0使用,本人亲自测试过,一切正常的奥!

    霸屏天下源码java-jhuangtw-dev.xg2xg:jhuangtw-dev.xg2xg

    霸屏天下源码java 一个方便的类似技术和服务查找表,可帮助前谷歌员工在现实世界中生存:) 非常欢迎拉取请求。 请不要列出任何机密项目! 有关这些技术中(一些)集成在一起的工作...Elasticsearch、Solr、Lucene 发布

    霸屏天下源码java-firstEX:第一EX

    霸屏天下源码java 一个方便的类似技术和服务查找表,可帮助前谷歌员工在现实世界中生存:) 非常欢迎拉取请求。 请不要列出任何机密项目! 有关这些技术中(一些)集成在一起的工作示例,...Elasticsearch、Solr、Lucene

    Note_scalad.tar.gz

    Java_Bubble_Sort Java_ClassLoader Java_Copy_On_Write Java_Exception Java_ExecutorService Java_IO Java_JVM_Monitor Java_Jstat Java_Lambda Java_Memory Java_Node Java_Photo_Base64AndZip Java_Request_Get...

    SOLR的应用教程

    1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录...

    InformationRetrievalWithLucene

    使用Lucene实现一个IR系统 功能: 索引:1.创建索引 2.delete index 3.add index 4.update index 搜索: 1.termQuery 2.multiFieldQuery 3.booleanQuery 4.prefixQuery 5.phraseQuery 6.multiPhraseQuery 7....

    ZendFramework中文文档

    1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) ...2.1.5. 定义访问控制 ...

Global site tag (gtag.js) - Google Analytics