Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
原文: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设置为想要的。
代码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,你不调?那不是让水贴浮到最上层了么?
以上都是些经验之谈,大家可以结合实际情况自己做一些调整。经验主义,有错误和不足的地方,大家多包涵,指正,呵呵。
Lucene.Net 2.3.1开发介绍 —— 三、索引(六)的更多相关文章
- Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(七) 5.IndexWriter 索引这部分最后讲的是IndexWriter.如果说前面提到的都是数据的结构,那么IndexWriter ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(五)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(五) 话接上篇,继续来说权重对排序的影响.从上面的4个测试,只能说是有个直观的理解了.“哦,是!调整权重是能影响排序了,但是好像没办法来 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(三)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(二)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(一)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引? 先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(三) Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了. 代码 4.3.4.1 Analyzer anal ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(三)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(三) 1.3 分词器结构 1.3.1 分词器整体结构 从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关 ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(一) 既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索.搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此 ...
随机推荐
- linux 远程桌面工具NX
1.在linux服务器上需要安装3个文件,下载地址为: http://www.nomachine.com/download-package.php?Prod_Id=1977 nxclient-3.4. ...
- java小练习--获取abc字符串在整个字符串中出现的次数
在下面一行字符串中获取abc字符串在整个字符串中出现的次数. "wabcerabctyabcuiabcabcqq" 思路:使用indexOf和substring(); 源码如下: ...
- 【一】仿微信飞机大战cocos2d-x3.0rc1
參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战 cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...
- 为什么我的outlook只能收信不能发信,发送测试电子邮件消息: 无法发送此邮件。请在帐户属性中验证电子邮件
链接地址:http://zhidao.baidu.com/link?url=aVIFo2aNLuHIZGZuEUataHkZp4XApHqyvbEK8ACHPhi3jwhGhM0GBAtm72AnsP ...
- typedef 总结
其实在正儿八经学C语言的时候typedef用的不是很多,记得书上对它的介绍只是一笔带过.的确它的用法是很简单,但这不代表在使用的过程中不会出错,今天来个彻底的总结. 作用:用来建立新的数据类型名.(注 ...
- qt执行cmd命令
源地址:http://blog.csdn.net/hn307165411/article/details/6858614 运行 route.ipconfig 肯定没问题 Copy code QProc ...
- ※数据结构※→☆线性表结构(list)☆============单向循环链表结构(list circular single)(四)
循环链表是另一种形式的链式存贮结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环. 单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可. 循环链表的 ...
- HDU 3790 最短路径问题 (SPFA)
转载请注明出处:http://blog.csdn.net/a1dark 分析:比一般最短路多了一个花费.多加一个判断即可.用的SPFA.这道题让我搞清楚了以前定义INF为啥爆的问题.受益颇多. #in ...
- codeforces #267 C George and Job(DP)
职务地址:http://codeforces.com/contest/467/problem/C 太弱了..这题当时都没做出来..思路是有的,可是自己出的几组数组总是过不去..今天又又一次写了一遍.才 ...
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
原文:WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在<基于IIS的WCF服务寄宿(Hosting)实现揭秘>中,我们谈到在采用基于IIS(或者 ...