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设置为想要的。

代码2.2.1
 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开发介绍 —— 三、索引(六)相关推荐

  1. Lucene.Net 2.3.1开发介绍 —— 三、索引(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...

  2. Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net

    原文:Lucene.Net 2.3.1开发介绍 -- 一.接触Lucene.Net 1.引用Lucene.Net类库 找到Lucene.Net的源代码,在"C#\src\Lucene.Net ...

  3. Lucene.Net 2.3.1开发介绍 —— 二、分词(一)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...

  4. 【Visual C++】游戏开发笔记三十六 浅墨DirectX提高班之四 顶点缓存的逆袭

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8276363 作者:毛星云(浅墨 ...

  5. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)

    2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只要出现这个字,不管它出现在什么位置.这就产生了上一小节开头讲的,对准确 ...

  6. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  7. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...

  8. 介绍三个开发技术小知识点

    背景 本文将介绍三个开发过程中的小技术点: Vue 组件传递对象时,根据是否会修改原对象内容,决定是直接使用,还是用副本: Spring 容器托管的实体 Bean 名称的基本规则: MyBatis 默 ...

  9. java lucene 开发介绍

    java lucene 开发介绍 lucene 版本号5.3.2,索引查看器 luke 版本号 5.5.0,非maven项目,需要自行下载jar包,使用ansj_seg分词器 在src下新建类 lib ...

最新文章

  1. Linux环境下oracle client安装和配置
  2. VMware ESX 主机的网卡负载均衡配置3种方法
  3. Windows APC学习笔记(二)—— 挂入过程执行过程
  4. “年薪25万只是白菜价”已成过去式,AI 岗位年薪下降8.9%!
  5. 中国联通董事李福申辞任
  6. 【Logstash】Logstash:把MySQL数据导入到Elasticsearch中
  7. 前端之路:平凡中的小事,有点鸡汤的感觉哟!
  8. 取消浏览器的默认样式
  9. java2实用教程 第6版(课后习题总结)
  10. matlab求x对应y值,matlab 不知道函数表达式,已知y值求x
  11. 眼见不为“实”,人们更信任人工智能合成的假脸
  12. 给实体机服务器重装Linux系统全记录
  13. 我本以为你们会写简历
  14. c语言内涵教程练习6,C语言内涵教程练习5参考答案.doc
  15. Ubuntu是现代(堂)吉诃德的痴想吗?
  16. php邀请码插件,织梦DedeCMS的会员邀请码注册插件 后台可生成邀请码
  17. 谷歌 不支持 activeX插件
  18. [网赚项目] 抖音小程序变现流程详细拆解
  19. UE4地编基础-材质蓝图篇
  20. 使用intellijidea无法识别@SpringbootApplication问题

热门文章

  1. Gamma阶段第一次scrum meeting
  2. 力扣(LeetCode)933
  3. form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
  4. 翻译:CREATE DATABASE语句
  5. Bloomberg开源面向OCaml的JavaScript后端BuckleScript
  6. [转] linux系统文件流、文件描述符与进程间关系详解
  7. Hutool之集合工具——CollectionUtil
  8. java设计一个bank类实现银行_SAP银企直连之平安银行(ECC版)
  9. 比特币vs分布式账本vs以太坊vs区块链
  10. 对 Python 开发者而言,IPython 仍然是 Jupyter Notebook 的核心