- 浏览: 200495 次
文章分类
最新评论
-
code_xiaoke:
session可是有30分钟有效期的还有如果在分布式的环境下 ...
Java Web 用户登陆示例代码 -
xul0038:
http://www.baidu.com
Java Web 用户登陆示例代码 -
16866:
非常棒,配置信息呢
Nginx负载均衡 -
开发小菜:
什么意思,没明白?能不能写一个例子
JS 实现DIV随浏览器窗口大小变化
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();
}
}
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();
}
}
发表评论
-
java实现动态切换上网IP (ADSL拨号上网) java开发
2013-04-24 10:06 1302动态切换IP的实现主是也由Windows的rasdial命令提 ... -
JAVA字符串处理函数
2013-04-12 09:21 1151Java中的字符串也是一连串的字符。但是与许多其他的计算机语 ... -
(转)Lucene打分规则与Similarity模块详解
2013-02-06 14:08 1210搜索排序结果的控制 Lu ... -
Compass将lucene、Spring、Hibernate三者结合
2013-02-01 11:02 1679版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声 ... -
Lucene3.0详解
2013-02-01 10:57 1419★第一部分:概述 1. 我 ... -
Java Web 用户登陆示例代码
2013-02-01 09:56 58118实现功能: 1、用户登陆、注销 2、利用session记 ... -
Java对数函数及Java对数运算
2013-02-01 09:47 6799Java对数函数的计算方法非常有问题,然而在API中却有惊人 ... -
Lucene为不同字段指定不同分词器(转)
2013-01-31 17:34 3475在lucene使用过程中,如 ... -
域名管理与解析原理 — 《Java邮件开发详解》读书笔记
2013-01-31 14:56 1723一 基本概念 1. 域名:域名是由圆点分开一串单词或缩写组 ... -
优秀的Java工程师需要掌握的10项技能
2013-01-31 14:04 1864编程专业相对于计算机领域其他专业来讲,是一门比较难以修炼的专业 ... -
Web开发入门不得不看
2013-01-28 17:31 1036如今,各种互联网的Web ... -
MVC框架的映射和解耦
2013-01-25 21:37 835最近在写一个业务上用到的框架,回想起接触过的一些MVC框架, ... -
JAVA发送EMAIL的例子
2013-07-09 09:44 907import javax.mail.*; ... -
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎
2012-11-19 09:55 1388前两天看到了一个中国新闻网,这个网站的搜索form的actio ... -
Lucene多字段搜索
2012-11-19 09:53 1042最近在学习Lucene的过程中遇到了需要多域搜索并排序的问题, ... -
Nginx负载均衡
2012-11-16 11:45 7669最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大. ... -
Lucene相关度排序的调整
2012-11-16 11:38 1732Lucene的搜索结果默认按 ... -
HashSet重复元素判断
2012-10-15 16:37 9142HashSet不能添加重复的元素,当调用add(Object) ... -
JAVA提高教程(2)-认识Set集合之HashSet
2012-10-09 09:44 975集合在Java里面的作用非 ... -
使用solr搭建你的全文检索
2012-09-28 16:34 1066Solr 是一个可供企业使用的、基于 Lucene 的开箱即用 ...
相关推荐
“Lucene5学习之排序-Sort”这个标题表明了我们要探讨的是关于Apache Lucene 5版本中的排序功能。Lucene是一个高性能、全文检索库,它提供了强大的文本搜索能力。在这个主题中,我们将深入理解如何在Lucene 5中对...
本文将深入探讨“Lucene5学习之自定义排序”这一主题,帮助你理解如何在Lucene5中实现自定义的排序规则。 首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分...
在"一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询"中,我们将重点关注如何利用Lucene实现这一高级搜索功能。 首先,Lucene是一个开源全文搜索引擎库,它为Java开发者提供了构建高效、可扩展的搜索...
**LUCENE搜索引擎基本工作原理** Lucene是一个开源的全文搜索引擎库,被广泛应用于构建复杂的搜索引擎系统。它的设计目标是高效、灵活且可扩展。理解Lucene的工作原理有助于开发人员更好地利用这一强大的工具。 **...
- 结果排序的示例,可能包含如何自定义`Sort`对象以改变默认的排序方式。 通过这些Demo,你可以逐步理解Lucene的工作原理,学习如何在实际项目中集成和优化搜索功能。此外,3.3.0版本可能还涉及一些当时的特性,...
除了基本的搜索外,Lucene还支持过滤器(Filter)和排序(Sort)功能。过滤器可以快速筛选满足特定条件的文档,而排序则允许用户自定义搜索结果的排列顺序。 8. **更新与删除** Lucene允许动态更新和删除文档,...
在实际应用中,Filter还可以与其他组件结合使用,如Sort(排序)和Highlight(高亮),以提供更丰富的搜索体验。例如,我们可以先使用Filter筛选出满足条件的文档,再根据某个字段进行排序,最后对高亮显示匹配的...
Lucene 排序、设置权重、优化、分布式搜索 Lucene 是一个高性能的搜索引擎库,它提供了强大的文本搜索和索引能力。下面我们将详细介绍 Lucene 的排序、设置权重、优化和分布式搜索等知识点。 一、Lucene 排序 ...
在Lucene中,`Sort`类用于控制搜索结果的排序方式,而`SortComparatorSource`是其内部组件,用于提供排序比较器。`MySortComparatorSource.java`可能是用户自定义的排序比较器源,它可以实现特定的排序逻辑,比如...
3. **搜索模块**:`Searcher`执行查询,`Scorer`计算相关性分数,`Sort`定义结果排序规则。 4. **存储模块**:`RAMDirectory`和`FSDirectory`提供内存和文件系统上的索引存储。 三、主要特性 1. **多线程支持**:...
它们在Lucene之上提供了更高级的功能,如分布式搜索、集群管理、更多数据源支持等。 10. **优化与维护** Lucene提供了合并段(Merge)和优化索引(Optimize)的功能,以减少索引碎片,提高搜索性能。同时,定期...
然后,你可以使用`FieldComparatorSource`将这个比较器与`TopFieldCollector`或`Sort`对象关联起来。 在提供的博客链接中,作者可能详细介绍了如何设置这些步骤,并可能给出了具体的代码示例。例如,他们可能会展示...
8. 排序(Sort):定义搜索结果的排序方式,可以基于评分、字段值等。 总之,Apache Lucene 4.9.1提供了强大的全文搜索功能,是构建高效搜索引擎的基础。通过深入理解其核心模块,开发者可以利用这个库构建出满足...
5. **过滤与排序**:除了返回最相关的搜索结果,我们还需要对结果进行过滤(例如,按日期或评分排序),这可以通过Filter和Sort类来实现。 6. ** faceted search(面式搜索)**:在大型信息集合中,提供分类浏览和...
例如,我们可以创建一个`Sort`对象,指定其排序依据为关键词出现的次数,这样搜索结果就会按照关键词在文档中出现的次数从高到低排列。 接下来,我们要讨论的是如何实现自定义排序,这通常涉及到对查询结果的优先级...
同时,Sort类则支持对结果进行定制化的排序,包括基于评分、字段值或自定义比较器的排序。 4. **高亮显示**: Lucene 提供了Highlighter组件,可以在搜索结果中高亮显示匹配的关键词,提升用户体验。4.6.1版文档会...
用户可以通过Sort类定制排序规则,如按时间、相关性等排序。 4. 分页与结果限制:通过设置TopDocs和ScoreDoc对象,可以实现搜索结果的分页显示,同时限制返回的文档数量。 五、扩展与优化 1. 分布式搜索:随着...
1. **索引(Indexing)**:Lucene的核心工作流程之一是创建索引。索引是一个结构化的数据存储,类似于图书馆的目录,能够快速定位到文档中的特定信息。通过分词(Tokenization)、词干提取(Stemming)和停用词过滤...