lucene学习笔记 2

Boosting特性

luncene对Document和Field提供了一个可以设置的Boosting参数, 这个参数的用处是告诉lucene, 某些记录更重要,在搜索的时候优先考虑他们 比如在搜索的时候你可能觉得几个门户的网页要比垃圾小站更优先考虑

lucene默认的boosting参数是1.0,  如果你觉得这个field重要,你可以把boosting设置为1.5, 1.2....等, 对Document设置boosting相当设定了它的每个Field的基准boosting,到时候实际Field的boosting就是(Document-boosting*Field-boosting)设置了一遍相同的boosting.

似乎在lucene的记分公式里面有boosting参数,不过我估计一般人是不会去研究他的公式的(复杂),而且公式也无法给出最佳值,所以我们所能做的只能是一点一点的改变boosting, 然后在实际检测中观察它对搜索结果起到多大的作用来调整

一般的情况下是没有必要使用boosting的, 因为搞不好你就把搜索给搞乱了, 另外如果是单独对Field来做Bossting, 也可以通过将这个Field提前来起到近似的效果

Indexing Date

日期是lucene需要特殊考虑的地方之一, 因为我们可能需要对日期进行范围搜索, Field.keyword(string,Date)提供了这样的方法,lucene会把这个日期转换为string, 值得注意的是这里的日期是精确到毫秒的,可能会有不必要的性能损失, 所以我们也可以把日期自行转化为YYYYMMDD这样的形势,就不用精确到具体时间了,通过File.keyword(Stirng,String) 来index, 使用PrefixQuery 的YYYY一样能起到简化版的日期范围搜索(小技巧), lucene提到他不能处理1970年以前的时间,似乎是上一代电脑系统遗留下来的毛病

Indexing 数字

 

  1. 如果数字只是简单的数据, 比如中国有56个民族. 那么可以简单的把它当字符处理
  2. 如果数字还包含数值的意义,比如价格, 我们会有范围搜索的需要(20元到30元之间的商品),那么我们必须做点小技巧, 比如把3,34,100 这三个数字转化为003,034,100 ,因为这样处理以后, 按照字符排序和按照数值排序是一样的,而lucene内部按照字符排序,003->034->100 NOT(100->3->34)

 

排序

Lucene默认按照相关度(score)排序,为了能支持其他的排序方式,比如日期,我们在add Field的时候,必须保证field被Index且不能被tokenized(分词),并且排序的只能是数字,日期,字符三种类型之一

Lucene的IndexWriter调整

IndexWriter提供了一些参数可供设置,列表如下

 属性默认值说明
mergeFactororg.apache.lucene.mergeFactor10控制index的大小和频率,两个作用
maxMergeDocsorg.apache.lucene.maxMergeDocsInteger.MAX_VALUE限制一个段中的document数目
minMergeDocsorg.apache.lucene.minMergeDocs10缓存在内存中的document数目,超过他以后会写入到磁盘
maxFieldLength 1000一个Field中最大Term数目,超过部分忽略,不会index到field中,所以自然也就搜索不到

这些参数的的详细说明比较复杂:mergeFactor有双重作用
  1. 设置每mergeFactor个document写入一个段,比如每10个document写入一个段
  2. 设置每mergeFacotr个小段合并到一个大段,比如10个document的时候合并为1小段,以后有10个小段以后合并到一个大段,有10个大段以后再合并,实际的document数目会是mergeFactor的指数
简单的来说mergeFactor 越大,系统会用更多的内存,更少磁盘处理,如果要打批量的作index,那么把mergeFactor设置大没错, mergeFactor 小了以后, index数目也会增多,searhing的效率会降低, 但是mergeFactor增大一点一点,内存消耗会增大很多(指数关系),所以要留意不要"out of memory"
把maxMergeDocs设置小,可以强制让达到一定数量的document写为一个段,这样可以抵消部分mergeFactor的作用.
minMergeDocs相当于设置一个小的cache,第一个这个数目的document会留在内存里面,不写入磁盘。这些参数同样是没有最佳值的, 必须根据实际情况一点点调整。
maxFieldLength可以在任何时刻设置, 设置后,接下来的index的Field会按照新的length截取,之前已经index的部分不会改变。可以设置为Integer.MAX_VALUE

RAMDirectory 和 FSDirectory 转化

RAMDirectory(RAMD)在效率上比FSDirectyr(FSD)高不少, 所以我们可以手动的把RAMD当作FSD的buffer,这样就不用去很费劲的调优FSD那么多参数了,完全可以先用RAM跑好了index, 周期性(或者是别的什么算法)来回写道FSD中。 RAMD完全可以做FSD的buffer。

为查询优化索引(index)

Indexwriter.optimize()方法可以为查询优化索引(index),之前提到的参数调优是为indexing过程本身优化,而这里是为查询优化,优化主要是减少index文件数,这样让查询的时候少打开文件,优化过程中,lucene会拷贝旧的index再合并,合并完成以后删除旧的index,所以在此期间,磁盘占用增加, IO符合也会增加,在优化完成瞬间,磁盘占用会是优化前的2倍,在optimize过程中可以同时作search。

并发操作Lucene和locking机制

 

  • 所有只读操作都可以并发
  • 在index被修改期间,所有只读操作都可以并发
  • 对index修改操作不能并发,一个index只能被一个线程占用
  • index的优化,合并,添加都是修改操作
IndexWriter和IndexReader的实例可以被多线程共享,他们内部是实现了同步,所以外面使用不需要同步

 

Locing

   lucence内部使用文件来locking, 默认的locking文件放在java.io.tmpdir,可以通过-Dorg.apache.lucene.lockDir=xxx指定新的dir,有write.lock commit.lock两个文件,lock文件用来防止并行操作index,如果并行操作, lucene会抛出异常,可以通过设置-DdisableLuceneLocks=true来禁止locking,这样做一般来说很危险,除非你有操作系统或者物理级别的只读保证,比如把index文件刻盘到CDROM上。

调试IndexWriter

IndexWriter 有一个infoStream的变量,调试信息从这里输出。可以把System.out设置给它

 

今天发布一个java火星人搜索引擎,搜索 火星人 正在试用, 你不想试试吗?
http://www.rcomponent.com/se/index.aspx.

请多提意见.
是用java做的, 你相信吗?
现在的bug
1. 生成的url 后多了个引号.
2. 速度有点慢。

来源:http://www.blogjava.net/cap/archive/2005/07/20/8078.aspx

基于GPU的GEMM矩阵相乘运算优化 从上图中我们可以看到三种处理方法。第一种是将A和B矩阵分块,第二种方法是将C和B矩阵分块,第三种方法是将C和A矩阵分块。GEMM的子任务是GEPP或GEMP;最小粒度的任务是GEBP或GEPB或点乘。 阅读详情

相关推荐

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

java搜索引擎: lucene学习笔记 2

Boosting特性 luncene对Document和Field提供了一个可以设置的Boosting参数, 这个参数的用处是告诉lucene, 某些记录更重要,在搜索的时候优先考虑他们 比如在搜索的时候你可能觉得几个门户的网页要比垃圾小站更优先考虑 lucene默认的boosting参数是1.0, 如果你觉得这个field重要,你可以把boosting设置为1.5, 1.2....等, 对...

weixin_30408739的博客 120

计算机三级考试嵌入式系统重点精简汇总

第一章 嵌入式系统概论 1.1.1嵌入式系统 (1)特点:(1)专用性;(2)隐蔽性;(3)资源受限;(4)高可靠性;(5)实时性;(6)软件固化。 (2)应用:(1)冰箱、洗衣机、电饭煲、空调、摄影机、DVD播放器等;(2)数控机床、飞机、汽车、电梯、X光机、血压计等;(3)电话机、传真机、打印机、pos机、GPS导航仪、路由器等。 1.1.2嵌入式系统组成与分类 (1)逻辑组成:硬件和软件,分为处理器、存储器、I|0设备与I|O接口,数据总线; (2)处理器:分为主处理器(CPU)和协处

chemkrik的博客 1万+

Lucene: Boosting documents and fields

Not all documents and fields are created equal—or at least you can make sure that’s the case by using boosting. Boosting may be done during indexing, as we describe here, or during searching. Search-...

术业有专攻 203

Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP

本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。

weixin_30664051的博客 584

Eclipse 数据空间组件(EDC)项目介绍

在当今数字经济的背景下,数据成为了新的“石油”。但与石油不同的是,数据可以无限共享且再生。然而,如何在保持数据主权的前提下实现高效、安全的数据共享,成为了企业和组织面临的主要挑战。这时,**Eclipse 数据空间组件(Eclipse Dataspace Components, EDC)**应运而生,它为企业在多方参与的数据交换中提供了一个标准化、可扩展的解决方案。数据空间不仅是一个多组织间的数据共享协议,还是一套支撑这些协议运行的技术基础设施。

m0_74331272的博客 4599

Lucene学习笔记(2)(竹笋炒肉)

Lucene学习笔记(2)  不仅仅在推广和介绍方面,车东在Lucene的汉化及web应用,也作出了极大的极大的贡献。他将自己的汉化和web应用两方面的成果,放在sourceforge上成了开源的项目。下面主要是对这个项目的学习笔记。  对Lucene的汉化,车东开发了两个Analyzer,一个是二元切分,一个单字切分。利用这两个中的任一个进行分析,都可以进行汉字的索引和检索了。我把这两个

温兵的专栏 1166

Open3D——直通滤波(python详细过程版)【2025最新版】

python就一个字:强。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 7516

lucene学习笔记2

简介 Doug Cutting 于2000年开始的项目 2001年9月后加入apache, Lucene是Doug Cutting的middle name 。 目前Lucene已经是apache的top level的项目, 已经不在jakarta下面, 同时也有了python,perl,c++,.net, Ruby(进行中)多个版本 1.Lucene 主要的两个任务:indexin...

liliugen的专栏 117

运维系列【仅供参考】:RustDesk部署疑难解答

RustDesk部署疑难解答

weixin_54626591的博客 279

人像美肤 人体美型 CVPR 2022 ABPN

人像美肤 CVPR 2022 ABPN

jacke121的专栏 841

Lucene 2小时学习笔记

1,创建index步骤 1.1 IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);   //创建indexWriter 1.2 wri...

It's my life . . . 153

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

lucene学习笔记2--检索

对已经创建好的索引库进行检索 /** * 利用关键词对索引进行查询 * * @param keyword  搜索条件 * @param indexPath 索引路径 * @throws IOException  * @throws ParseException  * @see [类、类#方法、类#成员] */ public void search(String keyword

zhangt85的专栏 698

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Lucene学习笔记(2)

在完成了文档预处理和索引的建立之后,就可以执行搜索操作了。本文将对Lucene搜索的二三事啰嗦一二。

wwb44444的博客 384

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

lucene学习笔记2-查询索引

import java.io.File; import java.io.FileReader; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field;

biran1980的专栏 555

软件测试实验全流程复盘:从用例设计到缺陷管理

软件测试是保障软件质量的核心手段,其本质是通过系统化的用例设计来发现缺陷。在工程实践中,黑盒测试与白盒测试互为补充:等价类划分和边界值分析聚焦输入域与临界条件,逻辑覆盖则用于衡量代码分支的执行充分度。这些方法不仅适用于商业级项目,在课程实验这类小型系统中同样能发挥关键作用。本文以成绩管理系统为测试对象,完整记录了从需求拆解、测试用例设计、单元测试执行到缺陷报告与回归测试的全过程,并总结了实验报告的撰写思路。通过真实踩坑经历,展示了如何将抽象的测试理论转化为可落地、可复现的实践流程,为软件工程学习者提供了一份

weixin_34007886的博客 408

lucene2.4学习笔记1-(初学Lucene,简单例子)

说明一下,这一篇文章的用到的lucene,是用2.4版本的,主要在查询的时候2.0版本的lucene与以前的版本有了一些区别 下面是一个简单的例子 1.第一步建立索引 [code="java"] public class IndexDatebase { public static void main(String[] args) throws IOException { //...

langhua9527的专栏 203

Lucene.NET学习笔记(2)

c#使用Lucene.net创建索引,实现搜索的代码示例 这段例子代码用的Lucene.Net2.9.2版本。现在最新版本是Lucene.Net3.0;Lucene.Net可以使用NuGet的安装得到using System; using System.Collections.Generic; using System.Web.Mvc; using Lucene.Net.Store; u

whdmxl991的专栏 654

lucene3.0学习笔记2-(再学Lucene的简单例子)

又在看Lucene,这回Lucene变成3.0了,太快了,Lucene in action 第二版也出来了 所以决定看一看 做了两个简单的例子 [size=xx-large][color=red]创建索引[/color][/size] [code="java"] package com.langhua; import java.io.File; import java.io....

langhua9527的专栏 205

LuceneInAction(第2版)学习笔记——第一章 初识Lucene

Lucene: 是一个搜索类库,而不是完整的程序 A. 索引组件   根据原始内容创建索引 Raw Content : Acquire Content    --> Build Document --> Analyze Document(*) --> Index Document(*) ==> Index(*) 原始内容    : 获取内容(提取文本) --> 建立文档     -

天涯人 1718

Lucene5 学习笔记(2) —— 简单介绍 Lucene 搜索功能和索引的修改、删除

孔浩老师Lucene学习笔记 第3讲 Lucene索引 这一节课孔老师为我们写了一个用户创建索引的工具类IndexUtil.java。 其实我们的Lucene就是创建索引,分词,然后搜索,我们就是一直在颠来倒去地做这几件事情。 文档(Document)和域(Field)的概念很重要,我们是为文档添加域。 事实上,我们的Document类类似于数据表里的一条记录,而我们的Field类似于数据

李威威的博客 2357

LuceneInAction(第2版)学习笔记——第四章 Lucene的分析过程

分析Analysis,在Lucene中指的是将域(Field)文本转换成最基本的索引表示单元————项(term)的过程。  在搜索过程中,这些项用于决定什么样的文档能够匹配查询条件。  分析器对分析操作进行了封装,它通过执行若干操作,将文本转换成语汇单元。  这些操作有:   提取单词、去除标点符号、去掉字母上的音调符号、   将字母转换成小写(也称规范化)、去除常用词、   将单词

天涯人 3164

LuceneInAction(第2版)学习笔记——第五章 高级搜索技术

LuceneInAction(第2版)学习笔记——第五章 高级搜索技术

天涯人 759

Lucene 4 和 Solr 4 学习笔记(2)

   现在先让我们把Lucene和Solr的开发环境搭建起来,建立简单的索引,并了解怎么参与Solr的使用和开发(提交一个bug或者尝试新的patch都可以算对solr的contribution)。    首先讲一下我的配置方法,然后翻译一下solr的wiki文章“How to Contribute to Solr”。    第一步是获取源代码。         一种方法是从s

9310
上一篇: lucene学习笔记 1
下一篇: lucene学习笔记 3
lhycarter
博客等级 码龄14年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值