Lucene小练十五(过滤器)

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()));
				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.Filter;
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();
		}
	}
	//过滤
	public void Searcher(String keyword,Filter filter)
	{
		 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(filter!=null)
			 {
				 topDocs=searcher.search(query,filter,50); 
			 }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.index.Term;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.NumericRangeFilter;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermRangeFilter;
import org.apache.lucene.search.WildcardQuery;
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_search01()
	{
//		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));
	}
	
	@Test
	public void test_search02()
	{
		Filter trf=new TermRangeFilter("filename", "Tomcat环境变量配置.kk", 
				"Tomcat环境变量配置.txt.kk", true,true);
		trf=NumericRangeFilter.newIntRange("size", 2, 100000, 
				true, true);
		//通过一个query进行过滤
		trf=new QueryWrapperFilter(new WildcardQuery(new Term("filename","*.kk"))); 
		search.Searcher("java", trf);
	}

}


【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识 CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找 阅读详情

相关推荐

Lucene5学习之Filter过滤器

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

Lucene过滤器

有的应用有些要求,对于某类型的内容即使满足条件了,但是也不能被搜索出来,lucene中提供了过滤器的功能,通过自定义的过滤器继承Filter,从而实现特定的过滤功能。 Filter是一种过滤行为BitSet是一种位集合队列,这个队列中只有两种取值,TRUE或FALSE,LUCENE以这两种取值代表文档是否被过滤,也就是说,LUCENE返回结果时,会首先遍历BITSET,仅将那些对应值为TRUE的...

baobeituping的专栏 222

Python+pytest+requests 自动化测试框架

环境准备 本次选用的是Python+Pytest+requests来搭建自动化框架,需要有 Python 环境(3.x 版本),安装pytest和requests,不会安装的自行去网上搜教程。 关于 Pytest 的基本使用,这里不作讲解,不清楚的可以看我之前的文章。 简单 Demo 我们先创建一个项目,取名api-test,然后在下面创建一个test_api.py的文件 # test_api.py import pytest import requests def test_01():

weixin_42686892的博客 1万+

Lucene4.10使用教程(六):Lucene的过滤器

过滤器在生产环境中应用也比较多。比如禁用词的过滤显示、推荐商品的过期设置等。 在编写时,需要在incrementToken添加自己的过滤规则。,下面的demo是针对同义词编写的过滤。过滤器的编写也可以参照org.apache.lucene.analysis.cn.ChineseFilter进行编写。 使用自定义过滤器进行查询 package com.johnny.lucene

编程爱好者 931

矩阵管理:一人100账号霸屏小红书,保姆级教程经验技巧

同时,如果你的账号表现很正常,很OK,它也增加账号权重。手机环境:一机一卡一号是基本操作,如果你觉得设备成本高,你就要知道WIN的云真机,一键新机,一键随机设备参数,一键还原,一键安装应用,自带批量发布笔记,私信聚合,自带回复私信,一键养号等等,一人批量注册100个小红书账号真的很简单!从流量逻辑来分析,大家有没有发现,从账号粉丝数来看,小红书很难出现类似抖音上超千万粉丝量级的账号,几十万粉丝的博主已经是头部账号了,原因在于,抖音的流量分发机制是80%的流量集中在 20% 的头部账号而。

FDF432DF的博客 5141

从ESP/ABS选型看轮速传感器:为什么你的车用了AK+PWM+7/14mA三种协议?

本文深入解析了汽车轮速传感器的三种主流协议(7/14mA电流型、PWM型和AK协议型)及其混合应用场景。通过对比不同协议的技术特点、成本效益和工程挑战,揭示了现代车辆采用多种传感器协议背后的设计逻辑,包括成本控制、性能平衡和冗余设计等关键因素。

weixin_29266679的博客 530

lucene自定义过滤器Filter

业务场景: 1:假设数据库中的字段给删了,如果 重建索引的话,就开销比较大。这个时候就可以考虑自定义过滤器 2:控制部分查询权限 为了避免频繁重构索引,我们可以在查询的时候定义一个自己的过滤器 ,去过滤掉这些数据。 lucene在package org.apache.lucene.util; 这包中提供了一个非常好的DocIdSet 实现类OpenBitSet,OpenBitSet这个实现类用来保存 0,1,1,0,0,1 ;每个0 、1 对应着其文档docid。呈现这样的链装结构表 大概实现原理

千丈之松的专栏 2245

vue3 - 高德地图定位出错Get ipLocation failed.Geolocation permission denied.(info: “FAILED“ | status: 0)报错解决!

vue3,nuxt3,高德地图,定位,位置,报错,AMap.Geolocation,解决报当前定位失败,高德地图H5 定位失败报错,web网页网站,报错详细解决教程,Get ipLocation failed.Geolocation permission denied.,高德地图定位报错info: "FAILED",高德地图status: 0,已经是https了还是报错,确保了浏览器位置已经开了,手机定位也开了,没解决,H5页面在ios的浏览器上使用 高德地图 报当前定位失败Geolocation,移动端设

✅ 精选推荐文章 6771

Lucene介绍与使用

1、了解搜索技术 1.1 什么是搜索 简单的说,搜索就是搜寻、查找,在IT行业中就是指用户输入关键字,通过相应的算法,查询并返回用户所需要的信息。 1.2 普通的数据库搜索 类似:select * from 表名 where 字段名 like ‘%关键字%’ 例如:select * from article where content like ’%here%’ 结果: where here...

但行好事 莫问前程 9万+

【时时三省】tessy 单元测试 之 CTE(The Classification Tree Editor) 的使用

有图有文字详细介绍利用 CTE界面中的树 批量产生用例。

时时三省的博客 837

深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑

本文深入介绍了NuPlayer的avsync逻辑和原理

张晖的专栏 1万+

IK Analyzer 3 中文分词器的学习笔记

IK Analyzer 3 中文分词器的学习笔记

【昆山人在上海】 761

FPGA实现PCIe接口

PCI Express(PCIe)是一种高速串行计算机扩展总线标准,在FPGA中实现PCIe接口可以实现与主机系统的高速数据通信。以下是FPGA实现PCIe接口的关键技术要点。

whm128的博客 1459

这可能是全网Java学习路线最完整,最详细的版本了,没有之一!(1)

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。异常的处理方式之抛出异常异常的处理方式之断点调试断点调试之引导运行步骤自定义异常异常关键字处理关键字执行流程异常总结1. 计算机网络和网络编程网络编程与网页编程的区别。

2401_84558091的博客 1156

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

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

开发十年,留下最完整的Java架构学习路线,学完年薪65W

10. 解决临界资源问题之同步方法 11. 解决临界资源问题之ReentrantLock 12. 多线程讲解和理解 13. 多线程在单例中的应用 14. 死锁介绍以及案例演示 15. 生产者与消费者设计模式

Netty711的博客 284

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

15分钟用Elasticsearch搭建可运行的球员全文检索系统

全文检索是现代应用中支撑模糊查询、多字段组合筛选与实时响应的核心能力,其底层依赖倒排索引实现O(1)级关键词定位,显著优于SQL LIKE的全表扫描。Elasticsearch通过内置Analyzer统一处理分词、大小写归一与同义扩展,天然支持结构化数据搜索与非结构化文本分析的融合。它在快速原型验证阶段展现出极高工程效率——无需复杂架构即可完成数据建模、Mapping定义与模糊容错配置,特别适合技术选型评估、后端功能速搭及初学者理解搜索数据流。本文以板球球员库为实例,聚焦Elasticsearch实战落地中

weixin_30399155的博客 505

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring Cloud 学习与实践(16):Elasticsearch 商品搜索、中文分词与索引一致性

当前 已经具备: 商品数据目前保存在 MySQL: 如果只按主键查询商品,MySQL 足够完成: 但当需求变成: 继续只用: 会逐渐遇到几个问题: 本章最终建立: 同时解决: 2、先理解 Elasticsearch 的核心概念 2.1 Elasticsearch 是什么 Elasticsearch 是一个面向搜索和分析的分布式文档数据库。本章最关心的能力是: 它不是为了替代当前 MySQL,而是承担不同职责:本章始终坚持: 因此: 不能简单处理为: 正确方向是: 2.2 Elasticsearch 与

作为一个长者,有必要记录下人生经验 902

lucene3.6.0索引操作的学习笔记

索引操作: 删除索引 indexreader:delete document,删除索引是在indexreader类进行 numDoc,maxDoc,删除索引是在内存先进行索引删除,合并索引后才能更新到磁盘,当删除一个document时,numDoc能及时更新,而maxDoc得等到合并索引后才会更新。 恢复被删除的索引: undelete方法 更新索引: 删除之后再插入 批...

我的技术旅程 168

Lucene5学习之排序-Sort

       这回我们来学习Lucene的排序。机智的少年应该已经发现了,IndexSearcher类的search方法有好几个重载:        /** Finds the top <code>n</code> * hits for <code>query</code>. * * @throws BooleanQue...

嘿↗你的益达 823

Lucene - 自定义过滤器Filter

Lucene自定义过滤 1. Query与Filter同异           Lucene中查询(Query)和过滤(Filter)有相似之处,查询能处理的过滤也可以完成。不同之处在于查询时带有评分操作,返回的结果集有相关性评分,而过滤返回的结果集没有相关性评分,即返回结果是无排序的。 2. Filter类结构图 CachingWrapperFilter、FileCacheRan

csmnjk的专栏 2580

Lucene-IKAnalyzer使用

import java.io.IOException; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.Ind

Java_feng的博客 3286

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值