网站搜索升级,采用lucene.net+similarity自定义算法

评论(0)浏览(10)分类:lucene.net/分词技术
网站搜索升级,采用lucene.net+similarity自定义算法  最近改版本站的搜索,采用盘石分词+lucene.net+similarity,去掉了中文停止词的索引,搜索的结果比较靠谱了,的,而等中文停止词已经去掉,不至于搜索出此类的无关信息。  similarity自定义算法,具体可以参考这篇文章:lucene.net实现similarity自定义排序

lucene.net实现similarity自定义排序

评论(0)浏览(74)分类:lucene.net/分词技术
lucene.net实现similarity自定义排序  最近碰到公司要求修改搜索排序,要求和这篇文章说的差不多,Lucene关于实现Similarity自定义排序,非常感谢原作者原创文章,欢迎转载,请注明 Author:kernaling.wong#gmail.comhttp://kernaling-wong.iteye.com/blog/586043  职位搜索的结果排序应该是,相关度优先,然后才是职位的发布时间倒序.即如果关键字匹配是一定要全部命中了才会排在第..

Lucene.Net 3.0.3如何从TokenStream中获取token对象

评论(0)浏览(79)分类:lucene.net/分词技术
Lucene.Net 3.0.3如何从TokenStream中获取token对象  Lucene.Net最高版本为3.0.3,并且apache已经不再提供Lucene.Net的更新,没仔细研究过Lucene.Net的所有版本,Lucene.Net3.0.3遍历TokenStream获取Token对象,已经和以前的版本有了很大的区别,很多方法都已经删除了或者过时。  以前版本的Lucene.Net从TokenStream中获取Token时调用Next方法就行了,源代码如下 public void Reusable..

Lucene.Net实现GroupBy的效果(2.3.1版)

评论(0)浏览(6)分类:lucene.net/分词技术
Lucene.Net实现GroupBy的效果(2.3.1版) 本文简单介绍Lucene.Net实现GroupBy效果的方法,与《Lucene.Net 按类别统计搜索结果数》一文类似。注意,这种使用方法很影响效率,特别是命中结果多的情况下。这段代码修正自2.3.1版本,其它版本可能会与此有差别。改造方法仍然是修改IndexSearcher,这里不再修改类库,而是通过自己的代码来实现。扩充IndexSearcher类Code highlighting produce..

Lucene.Net 按类别统计搜索结果数

评论(0)浏览(10)分类:lucene.net/分词技术
Lucene.Net 按类别统计搜索结果数今天群里有个朋友问"如何按类别统计搜索结果数?是不是要循环一个个类别去查询出总数啊?"以Lucene.Net现在的API,只能这样做。当然这样做一般会带来性能问题,所以更好的解决方案就是改动库文件了。  注意:本文内容仅适用于Lucene.Net,以2.1版为例,其它版本可能会有出入,Java版本差别更大一些。改动库先要有个思路。Lucene.Net的查询结果是..

《Lucene天书》 Lucene的文件系统

评论(0)浏览(8)分类:lucene.net/分词技术
《Lucene天书》 Lucene的文件系统 Lucene的文件系统分为内存和硬盘两个部分,文件逻辑组织方式暂且不提,本文将关注其物理结构,包括它在内存中如何存放,以及如何写入硬盘。目录一、相关类 1.1 Directory 1.2 IndexInput和IndexOutput 1.3 RAMFile二、索引概述 2.1 IndexOutput 2.2 RAMOutputStream和RAMFile 2.3 内存文件是如何写入硬盘的一、相关类1.1 Directory一个Director..

Lucene.Net 2.3.1开发介绍 —— 阅读索引

评论(0)浏览(4)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 阅读索引Lucene.Net 2.3.1开发介绍 —— 简介 Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net Lucene.Net 2.3.1开发介绍 —— 二、分词(一) 本篇介绍了如何测试分词器的效果,并且简单测试了一下Lucene.Net内置分词器的效果。Lucene.Net 2.3.1开发介绍 —— 二、分词(二) 本篇介绍Lucene.Net的分词过程,分析最懒惰的什么也不做的KeywordAnalyze..

Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本

评论(0)浏览(4)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本首先,你需要一个svn客户端。TortoiseSVN非常好用,可以从官方网站下载。下载地址:http://tortoisesvn.net/downloads。下载完成,就安装,需要重启电脑。然后在d盘下建立一个空文件夹,命名为Lucene.Net。打开文件夹,右键,则出现菜单。如图"附录一 1"。附录一 1发现多了两项,分别是SVN Checkout和TortoiseSVN。点“SVN Checkout”,出现“附..

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

评论(0)浏览(4)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(七) 5、IndexWriter索引这部分最后讲的是IndexWriter。如果说前面提到的都是数据的结构,那么IndexWriter就是业务的封装。无论述Document,Field还是看不见的Segment,Term都是对数据存储逻辑的抽象,IndexWriter包装了操作的过程。当然,这里不会讨论IndexWriter的每个细节,这里主要介绍IndexWriter的常用法和实际使用中遇到的部署问题。5.1 IndexW..

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

评论(0)浏览(15)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(六) 2.2 Field的Boost如果说Document的Boost是一条线,那么Field的Boost则是一个点。怎么理解这个点呢?设置Document的Boost会影响所有字段。在搜索的过程中,一般至少会搜索两个Field,比如同时搜索标题和内容。而Document的Boost将同时影响标题和内容的搜索得分,但是设置Field的Boost则不会有那么大的影响,Field的Boost只会影响一个点。那这个点..

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

评论(0)浏览(7)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(五) 话接上篇,继续来说权重对排序的影响。从上面的4个测试,只能说是有个直观的理解了。“哦,是!调整权重是能影响排序了,但是好像没办法来分析到底怎么调啊!”。似乎是这样,现在需要把问题放大,加大索引的内容。到博客园新闻区,用zzk找了4篇内容包含“测试”的文章。代码变成 2.1.5 代码2.1.5 +展开-C#1usingSystem;2usingSystem.Collectio..

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

评论(0)浏览(4)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(四)4、索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序。那个这个结果是怎么得出来的?这个顺序又是怎么排的呢?这两个问题不是本节讨论的重点,但是这两个问题却关系到本节要讨论的,索引对结果的影响问题。在不使用字段排序的情况下,Lucene.Net默认是按文档的得分来..

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

评论(0)浏览(6)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(三) 3、Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是Field,接下来看看Field的各项设置都会有什么样的效果。代码 3.1+展开-C#1/**////summary2///索引数据3////summary4privatevoidIndex()5{6Analyzeranalyzer=newStandardAnalyzer();7IndexWriterwriter=newIndexWrit..

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

评论(0)浏览(10)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 三、索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引?先想想看,假如现在有一个文本,我们会怎么去搜索。比如,有一个string = "abcdefghijklmnopqrstuvwxyz",这都是26个字母。现在要看看里面是不是有a,用IndexOf就可以很方便实现。现在数据量大了,在数据库里已经有100多条数据了,当然,利用数据库提供的操作方法,也可以很方便的查找..

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

评论(0)浏览(8)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 二、分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只要出现这个字,不管它出现在什么位置。这就产生了上一小节开头讲的,对准确性产生了极大干扰。比如,如果有一段这样的话:“这是一个英雄!他有无法用词汇形容的孤单,但是他并没有用言语来表达。”这句话包含了“..

Lucene.Net 2.3.1开发介绍 —— 简介

评论(0)浏览(5)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 简介 Lucene.Net是Lucene在dot net平台上的移植版本。它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己的搜索引擎,当然,是全文搜索。它不是一个程序,拿到它并不能立刻运行,你必须自己实现逻辑过程。这是一个和.Net Framework一样的框架。Lucene是用Java写的,尔后衍生出Nutch,接着又衍生出Hadoop。这些可以说和Lucene没有内在联..

基于.Net Framework 3.5的Lucene.Net 中文词组匹配分词器

评论(0)浏览(6)分类:lucene.net/分词技术
基于.Net Framework 3.5的Lucene.Net 中文词组匹配分词器可以自己看看是不是很高效。为了加快速度,尽量精简了算法。测试表明,精确度还可以。由于没有实现完整的一套字典机制,而是普通的文本字典,所以就不提供完整源码下载了,贴出核心的源码。从版本完整度上来说只能算是0.6版。另外,本分词系统使用的词库是ShootAnalyzer的词库。使用方法:参考以下代码1[TestMethod]2publicvoidTestMethod1()3{4..

搜索引擎分词

评论(0)浏览(19)分类:lucene.net/分词技术
搜索引擎分词 现在网上有很多种分词方法。要精确必然损失性能,要性能那么精确度必然下降。比如有句话:"我是中国人"看看这句话有多少种划分我我是我是中我是中国我是中国人是是中是中国是中国人中中国中国人国国人人按照灰色区域划分,无疑是正确的。但是从全部分词划分上来说,分词的分法达到了 2^n种。在我见过的分发中,很多种都是大同小异。而很多种都提到..

中文分词自动化探索

评论(0)浏览(12)分类:lucene.net/分词技术
中文分词自动化探索在使用Lucene时大家肯能也都碰到了个有趣的现象,用用StandardAnalyzer分词器和QueryParser类直接对查询语句进行解析,得到的结果,如果搜索语句是"搜索引擎",那么转换为Lucene的查询表达式就是"+title:搜 索 引 擎",能搜索到的结果一定是索引文档中“搜索引擎”这四个字连在一起,或者是中间只能包含符号。比如,搜索表达式是 +title:搜 索 引..

lucene.net 2.0 中文分词后语法高亮问题

评论(0)浏览(17)分类:lucene.net/分词技术
lucene.net 2.0 中文分词后语法高亮问题lucene.net 2.0 src包里自带了Highlighter.Net-2.0.0,可以用来实现语法高亮。 +展开-C#//定义多条件搜索分析器BooleanQuerybquery=newBooleanQuery();//定义分词器Analyzeranalyzer=newStandardAnalyzer();//多条件搜索拆分器MultiFieldQueryParserparser=newMultiFieldQueryParser(newstring[]{"title","content"},analyzer);query=parser.Par..

Lucene.Net 2.3.1开发介绍 —— 索引(二)

评论(0)浏览(5)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 索引(二)2、索引中用到的核心类在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类。其中Analyzer是索引建立的基础,Directory是索引建立中或者建立好存储的介质,Document和Field类是逻辑结构的核心,IndexWriter是操作的核心。其他类的使用都被隐藏掉了,这也是为什么Lucene.Net使用这么方便的原因。2.1 Analyzer前面已经对Analyzer进行..

Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)

评论(0)浏览(5)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了。代码 4.3.4.1Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->Analyzeranalyzer=newStandardAnalyzer();QueryParserparser=newQueryParser("title",analyzer);Queryquery=parser.Parse(@":");Console.WriteLin..

Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)

评论(0)浏览(2)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话。输入的语句是如何变成搜索条件的上一篇已经略有提及。4.3.1 观察表达式在研究表达式之前,一定要知道,任何一个Query都会对于一个表达式。不光可以通过Query构造表达式,还可以通过拼接字符串构造。这里说的观察表达式是指,用Query完成查询语句后,用ToString()方法输出Query的表达..

Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)

评论(0)浏览(7)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索。搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此,搜索和索引一般是分开部署。简单地说,就是一个应用程序(桌面程序)来索引,一个WEB程序来实现搜索。当然,为了测试的时候简单,这里还是使用NUnit的方式运行。搜索讲完后,将会简单介绍单机搜索引擎如..

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

评论(0)浏览(3)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 二、分词(六)Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStringReader类也是在新版本中引入的。这样改变,导致了2.3.1版本不得不修改2.1版以前的所有分词器。带来的另外一个问题的是,以前的一些现有分词器,拿到这里可能就不能用了。要使用ReadToEnd还有另外一个解决方法——修改Lucene.Net源码。在修改之前,我..

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

评论(0)浏览(5)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 二、分词(四)2.1.2 可以使用的内置分词简单的分词方式并不能满足需求。前文说过Lucene.Net内置分词中StandardAnalyzer分词还算比较实用(见1.1.2小节)。StandardAnalyzer为什么能满足我们的部分需求,而它又有哪些不足呢?看分词的好坏还是要从效果说起。简单的说,在中英文混合的情况下,StandardAnalyzer会把英文按空格拆,而中文则按单字拆。因为中文是按单..

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

评论(0)浏览(16)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 二、分词(三)1.3 分词器结构1.3.1 分词器整体结构从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关系图,把TokenStream和他的儿孙们统统拉上去,就能比较好的把握他们之间的关系。图 1.3.1.1如图1.3.1.1 就是他们的类关系图。看出如果要做一个分词器,最短的路,就是继承第二代,成为第三代。然后再写一个Analyzer的子类,专门用来做..

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

评论(0)浏览(8)分类:lucene.net/分词技术
Lucene.Net 2.3.1开发介绍 —— 二、分词(二)1.2.1、分词器工作的过程内置的分词器效果都不好,那怎么办?只能自己写了!在写之前当然是要先看看内置的分词器是怎么实现的了。从1.1分析分词效果,可以看出KeywordAnalyzer这个分词器最懒惰,基本什么事情也没做。并不是它不会做,而是我们没找到使用它的方法,就像手上拿着个盒子,不知道里面是什么,就不知道这个是干嘛的,有什么用。打开盒..