Lucene小练十四(文件排序)

Lucene 索引文件的生成(二十)之dvd&&dvm 本文承接文章索引文件的生成(十九)之dvm&&dvd继续介绍剩余的内容。 生成索引文件.dvd、.dvm之SortedDocValues、SortedSetDocValues   生成索引文件.dvd、.dvm之SortedDocValues、SortedSetDocValues的流程图: 图1: 写入TermsDict信息 图2:   在当前流程点,将存储SortedDocValues、SortedSetDocValues对应的所有域值按照字典序写入到索引文件中,在文章 阅读详情
//建索引
package Java.se.lucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

public class Test_Index {

	private Analyzer analyzer=new IKAnalyzer();
	private static Directory directory=null;
	static{
		try {
			directory=FSDirectory.open(new File("f:/lucene/Index07"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static Directory getDirectory()
	{
		return directory;
	}
	public void index(boolean hasNew)
	{
		IndexWriter writer=null;
		try {
			  writer=new IndexWriter(directory,new IndexWriterConfig
					(Version.LUCENE_36, analyzer));
			if(hasNew)
			{
				writer.deleteAll();
			}
			File file=new File("F:/lucene/lucenes");
			Document doc=null;
			for(File f:file.listFiles())
			{
				doc=new Document();
				doc.add(new Field("content",new FileReader(f)));//添加内容
				doc.add(new Field("filename",f.getName(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));//添加Name
				doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));
				doc.add(new NumericField("date",Field.Store.YES, true).setLongValue
						(f.lastModified()));
				doc.add(new NumericField("size",Field.Store.YES,true).setIntValue
					((int)f.length()/1024));
				writer.addDocument(doc);
			}
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally
		{
			if(writer!=null)
			{
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
//建搜索
package Java.se.lucene;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

public class Test_Search {

	static IndexReader reader=null;
	static{
		try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public IndexSearcher getSearcher()
	{
		 try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		 return new IndexSearcher(reader);
	}
	//返回Searcher
	public void Searcher(String keyword,Sort sort)
	{
		 try {
			 IndexSearcher searcher=getSearcher();
			 //使文件评分显示出来
			 searcher.setDefaultFieldSortScoring(true, false);
			 //在搜索器中使用IKSimilarity相似度评估器
			 searcher.setSimilarity(new IKSimilarity());
			 //创建IK。。 Query
			 Query query =IKQueryParser.parse("content",keyword);
			 TopDocs topDocs=null;
			 if(sort!=null)
			 {
				 topDocs=searcher.search(query, 50, sort); 
			 }else {
				 topDocs=searcher.search(query, 50); 
			}
			 //设置时间格式
			 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 for(ScoreDoc sds:topDocs.scoreDocs)
			 {
				 Document document=searcher.doc(sds.doc);
				 System.out.println(sds.doc+"-->"+document.get("filename")
						 +"【"+document.get("path")+"】"+"["+document.get("size")
						 +"]"+"("+sds.score+")"+"-->"+sdf.format
						 (new Date(Long.valueOf(document.get("date")))));
			 }
			 searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//测试类
package Java.se.lucene;

import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.junit.Before;
import org.junit.Test;

public class Test_All {
	Test_Index index=null;
	Test_Search search =null;
	@Before
	public void init()
	{
		 index=new Test_Index();
		 search =new Test_Search();
	}
	
	@Test
	public void test_index()
	{
		index.index(true);
	}
	@Test
	public void test_search()
	{
//		search.Searcher("java", null);
//		//按照默认评分排序
//		search.Searcher("java", new Sort().RELEVANCE);
//		//通过文件ID排序
//		search.Searcher("java", new Sort().INDEXORDER);
//		//通过文件大小排序
//		search.Searcher("java", new Sort(new SortField("size",SortField.INT)));
		//通过文件日期排序
//		search.Searcher("java", new Sort(new SortField("date",SortField.LONG)));
		//通过文件名称排序,第三个参数设置排序方式(true为降序)
//		search.Searcher("java", new Sort(new SortField("filename",SortField.STRING
//			,true)));
		//多条件排序
		search.Searcher("java",new Sort(new SortField("filename",SortField.STRING
				),SortField.FIELD_SCORE));
	}

}

lucene-相关度排序 知识点的梳理: lucene 为查询出来的结果(document)都打一个分,得分越高,排列的顺序越靠前,我们可以自己去干预..    相关度排序 相关度排序得分 相关度得分是在查询时根据查询条件实进计算出来的; 如果索引库数据不变,查询条件不变,查出的文档得分也不变; 注意事项 排序我们可以通过设置这个权重值来影响他的得分; 得分跟命中的次数有关系; 阅读详情

相关推荐

在STM32上运行小波变换及神经网络算法——(一)单片机中小波算法编写

在单片机上实现离散小波变换的C代码,通过确定信号长度、小波分解层数、小波基名称后进行编写,并改写成了方便调用的结构体格式。

weixin_45400202的博客 986

42、lucene和机器学习进行全文搜索,并排序

package com.lucene.test; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio...

aihaotan8299的博客 183

5分钟搞定Conflux钱包注册:Fluent钱包从安装到转账全流程指南

本文提供Conflux公链上Fluent钱包的完整注册和使用指南,涵盖从安装、助记词备份到CFX转账的全流程。特别强调安全操作要点,包括助记词保管和网络选择,帮助用户5分钟内快速掌握这款国产公链钱包的核心功能,确保数字资产安全。

weixin_29181861的博客 244

Lucene dvd dvm文件便是docvalues文件——就是针对field value的列存储

public final class Lucene54DocValuesFormat extends DocValuesFormat Lucene 5.4 DocValues format. Encodes the five per-document value types (Numeric,Binary,Sorted,SortedSet,SortedNumeric) with t...

djph26741的博客 242

如何加载交易策略EA到MT4/MT5

1、打开MT4/MT5软件 2、首先,必须有一个EA,而且必须是mq4/ex4为扩展名。点击左上角“文件”—“打开数据文件夹”,找到安装路径 3、将EA的ex4或mq4文件放到MT4目录\MQL4\Experts里面(本文以名为Demo的EA为例) 4、如果有DLL库文件,复制到experts目录下的libraries子目录中 5、如果有tpl模板文件,复制到templates目录中 6、添加完成后重启MT4,点击允许EA运行图标 7、在导航中找到刚才安装的EA,拖拽到...

weixin_41364817的博客 7359

7、PPG信号处理与质量评估

本文详细介绍了PPG信号的处理与质量评估方法,包括信号滤波技术(如卷积和互相关)、滤波器选择、信号质量指标(SQI)的定义与应用,以及标注一致性的评估。同时,提供了MATLAB代码示例和操作步骤,并分析了不同指标的优势与适用场景,旨在提高PPG信号在诊断和监测中的准确性与可靠性。

salt的博客 253

Lucene 7.x中根据Field字段值进行排序的小例子

Lucene 7中对DocValues系列的API做了一些改动 本帖就是说明一下API的变化 本帖的例子是将一些图书信息写入索引 然后搜索的时候按照图书出版时间的倒叙排序 先来看写入文档的代码: Directory dir=FSDirectory.open(Paths.get("E:/lucene_indexes")); IndexWriterConfig co

ccdust的博客 2715

基于LLM的电商数据分析系统

随着电商行业的蓬勃发展,每天都会产生海量的数据,这些数据包含了用户的行为信息、商品信息、销售数据等。如何从这些繁杂的数据中提取有价值的信息,为电商企业的决策提供支持,成为了一个关键问题。基于LLM的电商数据分析系统的目的就是利用大语言模型强大的自然语言处理和数据分析能力,对电商数据进行深入挖掘和分析,帮助企业了解市场趋势、用户需求、商品销售情况等,从而制定更加合理的营销策略、优化商品库存管理、提升用户体验等。本系统的范围涵盖了电商领域的多个方面,包括用户行为分析、商品分析、销售数据分析等。

AI Python 编程之道的博客 808

Lucene之索引排序

Lucene之索引排序

小好的博客 789

【图像去噪】基于加权核范数最小化算法实现图像去噪附matlab代码

1 简介 WNNM是一种约束矩阵奇异值稀疏性的低秩算法,在NNM理论基础上增加了核范数权重,有效利用了自然图像的先验信息并提高了核范数的灵活性. 2 部分代码 ​clcclear allclose allnSig = 100;O_Img = double(imread('Monarch.png'));​randn('seed', 0);N_Img = O_Img + nSig* randn(size(O_Img)); ..

qq_59747472的博客 3114

在 SAP 中,寄售业务(Consignment)与管道业务(Pipeline)都属于“物料先到、发票后到”的特殊采购模式,但两者的库存形态、物权转移时点、结算触发条件、系统配置完全不同

SAP中寄售业务与管道业务均属"先货后票"采购模式,但存在本质差异。寄售业务(如手机芯片)采用实物库存管理(标记"K"),物权在领用时转移,通过411K/201K移动类型触发负债;管道业务(如蒸汽)无实物库存,采用261P等移动类型直接消耗并生成应付。系统配置上,寄售需K类信息记录及GR收货,管道需P类信息记录且免GR。两者均通过MRKO汇总结算,但寄售按领用量计费,管道按提取量实时计费。核心区别在于库存形态与物权转移时点。

金牌架构师 555

Lucene 的索引排序是使用了倒排序原理

Lucene 的索引排序是使用了倒排序原理 其实LUCENE写的真的挺烂的,不论算法还是代码都很一般,不知道国内为什么这么多人都用它,哎,中国程序员的技术水平真的差太远了,不过为了一些初级的程序员做研究之用,还是把这篇文章贴出来吧 Luce

卧薪尝胆的Blog 4675

小程序真机调试蓝牙可以使用,线上发布版本蓝牙无法使用

小程序提示请打开蓝牙,微信小程序蓝牙无法连接,小程序真机调试蓝牙可以使用,线上版本蓝牙无法使用,测试环境蓝牙正常,开发环境蓝牙正常,发布后蓝牙无法使用

renkai721的专栏 826

Lucene sort 排序

排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最高或卖的最好的商品,再比如在Iteye里的博客栏里,每天都会以降序的方式,来显示出最新发出的几篇博客,有了排序,我们就能在某些时候很方便快速的得到某些有效信息,所以说排序功能,无处不在 ^_^。 

JackieLiuLixi的专栏 3418

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lucene利用sort对查询结果进行排序示例

利用sort对查询结果进行排序示例 对于要排序的字段,在索引的时候可以Field.Index.NOT_ANALYZED package com.cn; import org.apache.lucene.analysis.standard.StandardAnalyz

yyunix的专栏 2539

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

lucene排序

原文http://qindongliang1922.iteye.com/blog/1924608    排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最高或卖的最好的商品,再比如在Iteye里的博客栏里,每天都会以降序的方式,来显示出最新发出...

summer85的博客 337

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用lucene对搜索结果排序

lucene默认根据匹配度对搜索结果降序排,如果对某个域进行排序? 通常分两步: step1)建索引时doc.add(new Field("audittime", row.get("audittime").toString(),                Field.Store.NO, Field.Index.UN_TOKENIZED));关键点是你需要排序的字段建索引时应该采

pwlazy的专栏 1万+

Lucene Changes (Lucene 8.7.0)

2020年11月3号,Lucene发布了最新的版本8.7.0,本篇文章将会对Change Log中几个变更展开介绍下。 LUCENE-9510   该issue的原文如下: 1 Indexing with an index sort is now faster by not compressing temporary representations of the data.   上文大意为:当设置了段内排序IndexSort后,索引(Indexing)的速度比以前更快了,因为不再压缩临时的数据

q364367207的专栏 849

Lucene 排序及多字段查找

关键字: lucene 排序 多字段 查找 默认情况下,IndexSearcher类的search方法返回查询结果时,是按文档的分值排序的,可以使用重载的search方法对结果排序IndexSearcher.search(Query,Sort);new Sort() 和 Sort.RELEVANCE,以及null一样,采用默认排序,要定义排序字段,方法是将字段传入So

LightSun----让成功成为可能! 5075

Lucene 中自定义排序的实现

使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们就来看看在Lucene中如何实现自定义排序功能.      Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Compar

走向架构师之路 2345

lucene自定义排序

lucene本身提供很多默认的排序方式,比如根据相关度,写入索引的顺序,域的值等等,提供正向或者逆向的排序,大部分情况下,这已经能满足我们的基本要求。但在实际的应用中,也有一些需求,需要搜索的结果,依据搜索内容进行排序,比如在搜跟当前位置相关的对象时,需要根据距离的远近,来对返回的结果进行排序...

317

lucene多个域排序

lucene的sort类实现多个域排序,常见一个 SortField数据,将需要排序的域名字加入到这个数组中。 需要注意到是增加顺序,排序结果先按照第一个域排序,然后第二个域作为次要关键字排序。 // 常见一个排序域的数组 SortField[] sortArray; sortArray = new SortField[] {new SortField("order", SortFie

reesun的专栏 3757

一步一步跟我学习lucene(2)---lucene的各种Field及其排序

lucene的各种Field及公共接口,Field使用示例,各种Field的特性,lucene排序

wuyinggui的专栏 1万+

【橘子ES】Lucene 中的索引排序

在 es 6.0 中,引入了一项名为索引排序的新功能。用户现在可以优化 es 索引,以按特定顺序将文档存储在磁盘上。它是优化 es 性能的另一个有用工具。

liuwenqiang1314的博客 162
上一篇: Lucene小练十四(文件排序)
下一篇: Lucene小练十五(过滤器)
S孙大宝
博客等级 码龄15年 55粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值