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

c;3using System.Text;456namespace TestLucene7{8 using Lucene.Net.Index;9 using Lucene.Net.Store;10 using Lucene.Net.Analysis;11 using Lucene.Net.Analysis.Standard;12 using Lucene.Net.Documents;13 using Lucene.Net.Search;14 using Lucene.Net.QueryParsers;1516 class Program17 {18 static void Main(strin
http://www.w3dev.cn/article/20090901/971.aspx

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

Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来。目前Lucene.Net的分词库很不完善,实际应用价值不高。唯一能用在实际场合的StandardAnalyzer类,效果也不是很好。内置在Lucene.Net里的分词都被放在项目的Analysis目录下,也就是Lucene.Net.Analysis命名空间下。分词类的命名一般都是以“Analyzer”结束,比如StandardAnalyzer,StopAnalyzer,SimpleAnalyzer等。全部继承自Analyzer类。而它们一般各有一个辅助类,一般以”“Tokenizer”结尾,分词的逻辑大都在辅助类完成。使用Lu
http://www.w3dev.cn/article/20090901/972.aspx

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

的父类是Tokenizer,但是在Tokenizer里找不到我们想要的关系,但是Tokenizer又继承自TokenStream。查看TokenStream类。代码 1.2.1.312using System;34using Payload = Lucene.Net.Index.Payload;56namespace Lucene.Net.Analysis7{8 9 /// summaryA TokenStream enumerates the sequence of tokens, either from10 /// fields of a document or from query te
http://www.w3dev.cn/article/20090901/973.aspx

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

如何用Lucene.Net可以理解的方式写出来,这一步,上面讲了那么多小节,却是三个问题的最简单的一个。2.1.1 最简单的分词方式这里的最简单指的是用最少代码的方式。好,现在来个最简单的,写成代码2.1.1.1的方式总是最简单了吧?代码 2.1.1.1using System;using Lucene.Net.Analysis;namespace Test.Analysis{ public classEsayTokenizer : Tokenizer { }}太好了,终于写出来了,下面包装一下,写个Analyzer类。代码 2.1.1.2using Lucene.Net.Analysis;
http://www.w3dev.cn/article/20090901/974.aspx

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

dardAnalyzer作为分词器已经建立好了索引,接下来,进行查询操作。代码 2.1.2.11using System;2using Lucene.Net.Analysis;3using Lucene.Net.Analysis.Standard;4using Lucene.Net.Documents;5using Lucene.Net.Index;6using Lucene.Net.QueryParsers;7using Lucene.Net.Search;8using NUnit.Framework;9using System.Collections.Generic;1011namesp
http://www.w3dev.cn/article/20090901/975.aspx

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

Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStringReader类也是在新版本中引入的。这样改变,导致了2.3.1版本不得不修改2.1版以前的所有分词器。带来的另外一个问题的是,以前的一些现有分词器,拿到这里可能就不能用了。要使用ReadToEnd还有另外一个解决方法——修改Lucene.Net源码。在修改之前,我们需要知道ReusableStringReader作为StringReader的子类,为什么让ReadToEnd方法无效了。先查看.Net Framework StringReader源码关于ReadTo
http://www.w3dev.cn/article/20090901/976.aspx

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

与表达式分词器则是充当了翻译的角色,它是索引文件与查询表达式沟通的桥梁。如果搜索和索引使用不同的分词器,注意,这里要的是分词效果不一样的分词器,那就搜索不到想要的东西。表达式解析器将会通过分词器把一个字符串翻译成搜索懂得语言,然后再到索引文件中进行筛选。4.1.4 Lucene.Net的搜索流程在Lucene.Net中,,把构造表达式考虑进去,那么搜索将会要经历:(1)、构造查询表达式;(2)、打开索引文件,IndexSearcher会通过IndexReader类打开索引文件;(3)、得到查询表达式的一个筛选值——Weight;(4)、查询缓冲中是否有适合的记录,如果有则读取,否则扩容,扩容
http://www.w3dev.cn/article/20090901/977.aspx

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

Highlighter.com/-->using System;using System.Collections.Generic;using Lucene.Net.Analysis;using Lucene.Net.Analysis.Standard;using Lucene.Net.Documents;using Lucene.Net.Index;using Lucene.Net.QueryParsers;using Lucene.Net.Search;using NUnit.Framework;namespace Test{ [TestFixture] public class
http://www.w3dev.cn/article/20090901/978.aspx

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

PREFIXTERM ...\n WILDTERM ...\n \"[\" ...\n \"{\" ...\n NUMBER ...\n " Source="Lucene.Net" StackTrace: 在 Lucene.Net.QueryParsers.QueryParser.Parse(String query) 位置 D:\Lucene.Net\Lucene.Net\QueryParser\QueryParser.cs:行号 186 在 TestLucene.Program.Main(String[] args) 位置 D:\TestLucene\TestLucene\TestLuce
http://www.w3dev.cn/article/20090901/979.aspx

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

则表示存储向量。2.6 索引核心类工作流程图 2.6.1图 2.6.1如图2.6.1表示了数据在Lucene.Net索引过程处理的整个流程。注意,这个流程图中,分词器并不直接产生Field对象,在实例中Analyzer是被赋予IndexWriter实例的,等等执行添加文档操作的时候,IndexWriter才会真正地调用分词器生成Field需要的数据(在DocumentWriter类中)。上图只是反映了数据是如何流动的,并不是真实的调用过程。如图2.6.1表示了数据在Lucene.Net索引过程处理的整个流程。注意,这个流程图中,分词器并不直接产生Field对象,在实例中Analyzer是被赋予
http://www.w3dev.cn/article/20090901/980.aspx

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

art;iend;i++){Lucene.Net.Documents.Documentdoc=hits.Doc(i);System.Stringtext=doc.Get("content");//添加结尾,保证结尾特殊符号不被过滤stringtitle=doc.Get("title")+"+aaaaaaaaa";Lucene.Net.Analysis.TokenStreamtokenStream=highanalyzer.TokenStream("content",newSystem.IO.StringReader(text));Lucene.Net.Analysis.TokenStream
http://www.w3dev.cn/article/20090901/998.aspx

ASP.Net MVC框架配置与分析

.com/download/6/5/c/65cad864-54a5-463a-9573-bc7d0bbc1df9/ASPNetExt.exe当然,安装之前必须安装VS2008。安装完后可以在创建项目的地方增加以下两种项目。一种是“ASP.NET MVC Web Application and Test”会同时创建MVC项目和一个测试项目,一个是ASP.NET MVC Web Application,只会纯粹的建立MVC项目。而在项目中引用新文件的时候,也会增加MVC的页面。在创建MVC项目以后,会增加以下文件访问的机制是通过URL重写实现的。因此,你需要设置IIS映射。MVC是通过HttpM
http://www.w3dev.cn/article/20090901/1002.aspx

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

ile(token!=null)30{31Console.WriteLine(token.TermText()+"\t"+token.StartOffset()+"\t"+token.EndOffset());32token=t.Next();33}34t.Close();35}在Lucene.Net 索引或者搜索中直接使用YurowAnalyzer.YurowAnalyzer分析器。下载地址:http://files.cnblogs.com/birdshover/YurowAnalyzer.rar下面贴上些关键源码:Participle类(分词类)12publicListintStartA
http://www.w3dev.cn/article/20090901/1005.aspx

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

e.Net是Lucene在dot net平台上的移植版本。它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己的搜索引擎,当然,是全文搜索。它不是一个程序,拿到它并不能立刻运行,你必须自己实现逻辑过程。这是一个和.Net Framework一样的框架。Lucene是用Java写的,尔后衍生出Nutch,接着又衍生出Hadoop。这些可以说和Lucene没有内在联系,但是它们可以扩充Lucene的应用规模。目前,在dot net平台,还没发现有Nutch和Hadoop的移植程序。不过有了Lucene.Net就该庆幸了,已经能够做很多事情。Lucene和Lucene.Net目前
http://www.w3dev.cn/article/20090901/1006.aspx

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

ed? 为什么没有结果?分词器写错了?不要灰心!让我们来分析一下。在DoubleTokenizer类构造函数下一个断点,调试。因为,如果能正确运行,这个构造函数肯定要进入的。调试后看到了什么?传入的TextReader的类型是Lucene.Net.Index.DocumentsWriter.ReusableStringReader。查看Lucene.Net.Index.DocumentsWriter.ReusableStringReader类的定义,它继承自StringReader类,但是它重写掉了一些方法,而且,我们并没有发现我们使用的ReadToEnd方法。问题可能出在这里。看到Reus
http://www.w3dev.cn/article/20090901/1007.aspx

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

存储结构词在倒排索引中是最小的单位,在Lucene.Net中衡量单位是Term,由N个Term构成了Filed,而又有N个Filed组成了Document,N个Document又会组成一个Segment,N个Segment会被写到Lucene.Net的文件系统。文件系统留到后面再讲,因为Lucene.Net自己实现了自己的文件系统,而这个系统的最小单位由3个文件组成,可以放到一个目录下,也可以放到内存中。总的来说Lucene.Net的文件系统可以理解为一个个的文件,在Windows下就是一个目录,里面包含了三个文件,但是从Lucene.Net的逻辑上来说,这就是一个文件。然后文件里的文本分词N
http://www.w3dev.cn/article/20090901/1008.aspx

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

ressionAdapter。在Lucene.Net中内置了一个“SharpZipLibAdapter”,但是需要有编译符号SHARP_ZIP_LIB才能编译进去。为了看看效果,所以给项目添加SHARP_ZIP_LIB符号,然后增加app.config配置文件,在appseting中添加Lucene.Net.CompressionLib.class键,值是SharpZipLibAdapter。然后下载 ICSharpCode.SharpZipLib.dll,这个dll才是真正实现压缩算法的。下载地址: http://sourceforge.net/project/downloading.ph
http://www.w3dev.cn/article/20090901/1009.aspx

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

e.Net中怎么调整权重呢?在不修改评分公式的前提下,可以通过设置Boost来控制权重的值。这个过程在索引文档的时候就进行了,一旦文档被写入,这个值就不可更改了,除非删了重新建一个。调整权重也有两种调法,来仔细分析下设置权重如何影响排序的。 2.1 Document的boost对以前的代码做个修改,变成代码2.1.1。代码2.1.1 +展开-C#1usingSystem;2usingSystem.Collections.Generic;3usingLucene.Net.Analysis;4usingLucene.Net.Analysis.Standard;5usingLucene.Net.D
http://www.w3dev.cn/article/20090901/1010.aspx

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

1.5 代码2.1.5 +展开-C#1usingSystem;2usingSystem.Collections.Generic;3usingLucene.Net.Analysis;4usingLucene.Net.Analysis.Standard;5usingLucene.Net.Documents;6usingLucene.Net.Index;7usingLucene.Net.QueryParsers;8usingLucene.Net.Search;9usingNUnit.Framework;1011namespaceTest12{13[TestFixture]14publicclass
http://www.w3dev.cn/article/20090901/1011.aspx

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

个点有什么用呢? 现在来做个假设,假设,现在有一条记录是关于Lucene的,这篇文章讲得很好,我想要让别人搜索Lucene这个关键字的时候,这条记录一定排在前10。怎么办?设置Docuement的Boost?设置得还很高?OK!这篇文章里面也有其他关键字,比如"asp.net","Sql Server"。现在搜索"asp.net",发现这篇文章也跑到前10了。这可不是我想要的。 怎么办呢? 现在有两个解决办法,一个就是冗余一个Field,里面记录了Tag一类的东西,给这篇文章设置Tag值为“Lucene”,同时在索引tag字段的时候把它的Boost调高。比如代码2.2.1,在添加完文档后把该文
http://www.w3dev.cn/article/20090901/1012.aspx

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

更新都能及时反映到索引当中,站内搜索引擎一般都会面临这样的问题。Lucene.Net已经为我们提供了实现的方法,至于实现的逻辑需要你去思考。6、索引小节本篇文章是索引部分的完结篇。从第一篇到这里第七篇,主要介绍了两个东西,一个是Lucene.Net的逻辑存储,另外一个就是如何操作逻辑存储。在逻辑存储上讲得比较详细,特别是关于权重部分,而操作则只简单提一下。因为,逻辑存储有助于理解Lucene.Net索引的流程,而操作则只是相当于CPU的指令,业务逻辑需要自己去实现。相信看了以上七篇文章,有助于对Lucene.Net索引的理解,当然,这里只讲了表面上的东西,更加深入地理解Lucene需要从更加
http://www.w3dev.cn/article/20090901/1013.aspx

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

可以从官方网站下载。下载地址:http://tortoisesvn.net/downloads。下载完成,就安装,需要重启电脑。然后在d盘下建立一个空文件夹,命名为Lucene.Net。打开文件夹,右键,则出现菜单。如图"附录一 1"。附录一 1发现多了两项,分别是SVN Checkout和TortoiseSVN。点“SVN Checkout”,出现“附录一 2”界面。附录一 2在URL of repository框输入https://svn.apache.org/repos/asf/incubator/lucene.net/trunk/,然后点OK,就可以下载到最新版本。历史版本在http
http://www.w3dev.cn/article/20090901/1014.aspx

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

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的分词过程,分析最懒惰的什么也不做的KeywordAnalyzer分词器和只用空格分词的WhitespaceAnalyzer分词器。然后粗略得到Lucene.Net的分词流程和如何简单的分词,这些是自己写分词器的基础。Lucene.Net
http://www.w3dev.cn/article/20090901/1015.aspx

关于Lucene.Net 2.3.1 索引时抛出System.IndexOutOfRangeException异常

255,和15做与运算,还是能够大于9。这是Java与.net的差异造成的。Java中的byte范围是-128~127,也就是说Java中的byte类型是有符号的,而.net中的byte类型是无符号的。java中的byte应该与.net中的sbyte相对应。Java代码原本限制出现该错误的逻辑,移植到.net版本可能会无效。这里就造成了引发这个异常的原因。以上属个人推测。二、解决办法暂时没有太好的办法能够解决这个问题。1、在Lucene 2.4版本中DocumentWriter已经进行了大改造,再翻译过来可能不会有这种问题。但是等.net版本更新到那个版本估计还要很长时间。2、还有就是把现在使
http://www.w3dev.cn/article/20090901/1017.aspx

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

今天群里有个朋友问"如何按类别统计搜索结果数?是不是要循环一个个类别去查询出总数啊?"以Lucene.Net现在的API,只能这样做。当然这样做一般会带来性能问题,所以更好的解决方案就是改动库文件了。  注意:本文内容仅适用于Lucene.Net,以2.1版为例,其它版本可能会有出入,Java版本差别更大一些。改动库先要有个思路。Lucene.Net的查询结果是一个Hits,而它有一个方法length可以得到总的结果。这个结果是一个精确值。这个值实际上是在TopDocCollector类的Collect方法计算出来的。要改精算为估算也就是在这里添加算法就可以了。 Code highlight
http://www.w3dev.cn/article/20090901/1018.aspx

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

本文简单介绍Lucene.Net实现GroupBy效果的方法,与《Lucene.Net 按类别统计搜索结果数》一文类似。注意,这种使用方法很影响效率,特别是命中结果多的情况下。这段代码修正自2.3.1版本,其它版本可能会与此有差别。改造方法仍然是修改IndexSearcher,这里不再修改类库,而是通过自己的代码来实现。扩充IndexSearcher类Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->///summary///增加了GroupBy功能
http://www.w3dev.cn/article/20090901/1019.aspx

防止.NET木马列所有站物理路径,防止.JPG类型木马

前段时间单位的服务器上被人上传了一个.NET木马,,这次让我认识到以前没有见过的上传木马的招数,,同时也找出一些对策,,咱落伍论坛很多都有服务器的,,就分享出来给大家吧。.net木马目前很强的,下载地址://download/20090831/76.aspx(你可以上传到你的服务器上看看对你的系统都能做什么)此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径。以前有很多人提出过,但一直没有人给解决的答案。。防御方法:“%SystemRoot%/ServicePackFiles/i386/active
http://www.w3dev.cn/article/20090831/886.aspx

.net 2.0 remoting 中 TCP Channel 用户认证探讨

semblyName,命名空间为:AuthorizationNameSpace。+展开-C#classAuthorizationModule:IAuthorizeRemotingConnection{publicboolIsConnectingEndPointAuthorized(System.Net.EndPointendPoint){//验证IP地址代码.....returntrue;}publicboolIsConnectingIdentityAuthorized(IIdentityidentity){//Windows用户名identity.Name//Windows用户验证代码..
http://www.w3dev.cn/article/20090831/894.aspx

.net 使用 TCP 信道进行身份验证

使用 TCP 信道进行身份验证TCP 信道直接支持身份验证和模拟。本主题介绍如何配置客户端和服务器信道。通过设置关联的 TcpServerChannel 和 TcpClientChannel 对象的属性,.NET Framework 允许远程对象的服务器对调用方进行身份验证和模拟。服务器配置若要配置 TCP 服务器信道以对远程调用方进行身份验证,请将 TCP 信道上的 secure 属性设置为 true,如下面的配置文件所示。+展开-XML?xmlversion="1.0"encoding="utf-8"?>configurationsystem.runtime.remotingapplic
http://www.w3dev.cn/article/20090831/895.aspx

简易天气预报查询

atch(htmlBody)){json="{success:true,weathers:[{d:'"+DateTime.Now.ToString("yyyy-MM-dd")+"'";Matchm=r.Match(htmlBody);json+=",weather:'"+m.Groups[2].Value+"'";r=newRegex("div\\s+class=\"w-number\"([\\s\\S]+?)/div",RegexOptions.IgnoreCase|RegexOptions.Compiled);m=r.Match(htmlBody);json+=",tmp:'"+Remov
http://www.w3dev.cn/article/20090825/866.aspx