Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
2.2 Field的Boost
如果说Document的Boost是一条线,那么Field的Boost则是一个点。怎么理解这个点呢?设置Document的Boost会影响所有字段。在搜索的过程中,一般至少会搜索两个Field,比如同时搜索标题和内容。而Document的Boost将同时影响标题和内容的搜索得分,但是设置Field的Boost则不会有那么大的影响,Field的Boost只会影响一个点。那这个点有什么用呢?
现在来做个假设,假设,现在有一条记录是关于Lucene的,这篇文章讲得很好,我想要让别人搜索Lucene这个关键字的时候,这条记录一定排在前10。怎么办?设置Docuement的Boost?设置得还很高?OK!这篇文章里面也有其他关键字,比如"asp.net","Sql Server"。现在搜索"asp.net",发现这篇文章也跑到前10了。这可不是我想要的。
怎么办呢?
现在有两个解决办法,一个就是冗余一个Field,里面记录了Tag一类的东西,给这篇文章设置Tag值为“Lucene”,同时在索引tag字段的时候把它的Boost调高。比如代码2.2.1,在添加完文档后把该文档的tag这个Field Boost设置为想要的。
1/**//// <summary>
2/// 添加文档
3/// </summary>
4/// <param name="writer">维护文档管理器</param>
5/// <param name="title">标题</param>
6/// <param name="content">内容</param>
7/// <param name="tag">tag</param>
8/// <param name="boost">tag的boost</param>
9void AddDocument(IndexWriter writer, string title, string content, string tag, float boost)
10{
11 Document document = new Document();
12 document.Add(new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
13 document.Add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
14 document.Add(new Field("tag", content, Field.Store.YES, Field.Index.TOKENIZED));
15 document.GetField("tag").SetBoost(boost);
16 writer.AddDocument(document);
17}
当然,这样处理不是很好,一来,增加一个字段,给维护上带来难度,而且很多好文章没tag怎么办,再有就是非站内搜索呢?另一种办法就是设置一个字数相对较少的字段,调高它的Boost。
比如,我现在把Title这个字段的Boost调成1.3,也就是说我搜索的时候,title的权重要比content的高,那么当我标题中含有Lucene的时候,得分总是会偏高,那样,就可以把记录调到前面去了。这里千万不要调高content,如果全部调的话影响也不是太大,但是对于搜索整体的质量有很大影响。为什么这么说呢?因为如果标题里含有一个keyword "a",那么这篇文章一般有关于这个“a”的内容,但是如果内容里含有“a”而标题没有,非常多的文章实际上都不是讲“a”的。
2.3 怎么有效调整得分
这里只是我的一些调整的经验,其实想一想也就明白了,没什么深奥的。
(1)、首先,标题的权重一定比内容的要高;
(2)、根据实际情况调整权重;
比如,现在要索引论坛的内容,那完全可以设置内容很少的帖子权重非常低,这个时候直接设置Document的权重就行了;而如果这个帖子的回复或者访问量 又非常高,那么每个回复或者浏览量,给加0.01的基数,让这个总体量不超过0.2;要是这个帖子是精华贴呢?直接加上0.1吧。
实际的调整过程就是你把各种问题想想全面就好了。
(3)、如果要把一个文档的Document的Boost调得非常高,比如调整成2,那么千万要注意,减少它的内容,内容中出现的词越少越好;
比如,像baidu那种的做个广告,那么就在里面放一个商家买的关键词就行了,其它什么也不要。
(4)、宁可设置Field,比设置Document来得好,设置的方法就不用说啦。
要注意的是,越短的帖子,越要降低它的权重。比如它只有两个字,怎么也要把它的权重调到0.1一下。为什么?因为两个字一般是一个词,这个词如果被搜索,得分就是1,你不调?那不是让水贴浮到最上层了么?
以上都是些经验之谈,大家可以结合实际情况自己做一些调整。经验主义,有错误和不足的地方,大家多包涵,指正,呵呵。
转载于:https://www.cnblogs.com/birdshover/archive/2008/09/09/1287844.html
Lucene.Net 2.3.1开发介绍 —— 三、索引(六)相关推荐
- Lucene.Net 2.3.1开发介绍 —— 三、索引(三)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...
- Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
原文:Lucene.Net 2.3.1开发介绍 -- 一.接触Lucene.Net 1.引用Lucene.Net类库 找到Lucene.Net的源代码,在"C#\src\Lucene.Net ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...
- 【Visual C++】游戏开发笔记三十六 浅墨DirectX提高班之四 顶点缓存的逆袭
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8276363 作者:毛星云(浅墨 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只要出现这个字,不管它出现在什么位置.这就产生了上一小节开头讲的,对准确 ...
- 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...
- 介绍三个开发技术小知识点
背景 本文将介绍三个开发过程中的小技术点: Vue 组件传递对象时,根据是否会修改原对象内容,决定是直接使用,还是用副本: Spring 容器托管的实体 Bean 名称的基本规则: MyBatis 默 ...
- java lucene 开发介绍
java lucene 开发介绍 lucene 版本号5.3.2,索引查看器 luke 版本号 5.5.0,非maven项目,需要自行下载jar包,使用ansj_seg分词器 在src下新建类 lib ...
最新文章
- Linux环境下oracle client安装和配置
- VMware ESX 主机的网卡负载均衡配置3种方法
- Windows APC学习笔记(二)—— 挂入过程执行过程
- “年薪25万只是白菜价”已成过去式,AI 岗位年薪下降8.9%!
- 中国联通董事李福申辞任
- 【Logstash】Logstash:把MySQL数据导入到Elasticsearch中
- 前端之路:平凡中的小事,有点鸡汤的感觉哟!
- 取消浏览器的默认样式
- java2实用教程 第6版(课后习题总结)
- matlab求x对应y值,matlab 不知道函数表达式,已知y值求x
- 眼见不为“实”,人们更信任人工智能合成的假脸
- 给实体机服务器重装Linux系统全记录
- 我本以为你们会写简历
- c语言内涵教程练习6,C语言内涵教程练习5参考答案.doc
- Ubuntu是现代(堂)吉诃德的痴想吗?
- php邀请码插件,织梦DedeCMS的会员邀请码注册插件 后台可生成邀请码
- 谷歌 不支持 activeX插件
- [网赚项目] 抖音小程序变现流程详细拆解
- UE4地编基础-材质蓝图篇
- 使用intellijidea无法识别@SpringbootApplication问题
热门文章
- Gamma阶段第一次scrum meeting
- 力扣(LeetCode)933
- form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
- 翻译:CREATE DATABASE语句
- Bloomberg开源面向OCaml的JavaScript后端BuckleScript
- [转] linux系统文件流、文件描述符与进程间关系详解
- Hutool之集合工具——CollectionUtil
- java设计一个bank类实现银行_SAP银企直连之平安银行(ECC版)
- 比特币vs分布式账本vs以太坊vs区块链
- 对 Python 开发者而言,IPython 仍然是 Jupyter Notebook 的核心