放逐忧伤

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  Lucene.NET

摘要:在Lucene.net实现自定义排序,需要实现两个Lucene.Net.Search的两个接口:public interface SortComparatorSource{ ScoreDocComparator NewComparator(IndexReader reader , System.String fieldname) ;}public interface ScoreDocComparator{ int Compare(ScoreDoc i , ScoreDoc j) ; System.IComparable SortValue(ScoreDoc i) ; int SortType( 阅读全文
posted @ 2011-07-21 11:20 放逐忧伤 阅读(441) 评论(0) 推荐(0) 编辑

摘要:lucene的确是个好东西!如果你有时间,我强烈推荐你学习下!======================================================================【摘录收集】------------------------------------------------------------------------------------------------------------------------------一、Lucene点滴: (发音为['lusen]),我经常就读鹿神,是头活蹦乱跳的好鹿,研究它吧,保证感觉它很神!lucene 阅读全文
posted @ 2011-07-21 11:19 放逐忧伤 阅读(434) 评论(1) 推荐(1) 编辑

摘要:1、主键就是聚集索引 这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。 显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。 从我们前面谈到的聚集索引的定义我们可以看出,使用聚集 阅读全文
posted @ 2011-07-21 11:17 放逐忧伤 阅读(611) 评论(0) 推荐(0) 编辑

摘要:Lucene.net是目前在.net环境中被普遍使用的全文索引的开源项目,这次在项目的开发中也使用它进行全文索引。在开发过程中碰到一些小问题就是对多字段和多索引目录进行搜索。1、多字段搜索就是同时要一个以上的字段中的内容进行比较搜索,类似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。Lucene.net中的单个字段查询大家都比较熟悉,这里对字段content进行搜索Query query = QueryParser.Parse(querystr,"cont 阅读全文
posted @ 2011-07-21 11:11 放逐忧伤 阅读(283) 评论(0) 推荐(0) 编辑

摘要:第一、 按词条搜索 - TermQuery query = new TermQuery(new Term("name","word1")); hits = searcher.search(query); 这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了。 第二、 “与或”搜索 - BooleanQuery 它实际是一个组合 query 看看下面的代码: query1 = new TermQuery(new Term("name","word1")); query2 = new Ter 阅读全文
posted @ 2011-07-21 11:10 放逐忧伤 阅读(286) 评论(0) 推荐(0) 编辑

摘要:以下例子采用 Lucene.NET 1.9 版本,可取去 Lucene.Net 下载。 1. 基本应用 using System;using System.Collections.Generic;using System.Text;using Lucene.Net;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;us 阅读全文
posted @ 2011-07-21 11:09 放逐忧伤 阅读(401) 评论(0) 推荐(0) 编辑

摘要:1.1Lucene.NET是一个全文搜索框架,而不是应用产品。1.2 lucene能做什么要回答这个问题,先要了解lucene的本质。实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。知道了这个本质,你就可以发挥想象做任何符合这个条件的事情了。你可以把站内新闻都索引了,做个资料库;你可以把一个数据库表的若干个字段索引起来,那就不用再担心因为“%like%”而锁表了;你也可以写个自己的搜索引擎……1.3 你该不该选择lucene 下面给出一些测试数据,如果你觉得可以接受,那么可以选择。测试一:250万记录,300M左 阅读全文
posted @ 2011-07-21 11:05 放逐忧伤 阅读(565) 评论(0) 推荐(0) 编辑

摘要:使用 MultiFieldQueryParser 可以指定多个搜索字段。Query query = MultiFieldQueryParser.Parse("name*", new string[] { FieldName, FieldValue }, analyzer);IndexReader reader = IndexReader.Open(directory);IndexSearcher searcher = new IndexSearcher(reader);Hits hits = searcher.Search(query);多条件搜索除了使用 QueryPar 阅读全文
posted @ 2011-07-21 10:46 放逐忧伤 阅读(739) 评论(0) 推荐(0) 编辑

摘要:可以给 Document 和 Field 增加权重(Boost),使其在搜索结果排名更加靠前。缺省情况下,搜索结果以 Document.Score 作为排序依据,该数值越大排名越靠前。Boost 缺省值为 1。Score = Score * Boost通过上面的公式,我们就可以设置不同的权重来影响排名。 如下面的例子中根据 VIP 级别设定不同的权重。Document document = new Document();switch (vip){case VIP.Gold: document.SetBoost(2F); break;case VIP.Argentine: document.Se 阅读全文
posted @ 2011-07-21 10:40 放逐忧伤 阅读(961) 评论(0) 推荐(0) 编辑

摘要:我们可以使用 MultiReader 或 MultiSearcher 搜索多个索引库。MultiReader reader = new MultiReader(new IndexReader[] { IndexReader.Open(@"c:\index"), IndexReader.Open(@"\\server\index") });IndexSearcher searcher = new IndexSearcher(reader);Hits hits = searcher.Search(query);或IndexSearcher searcher1 阅读全文
posted @ 2011-07-21 10:37 放逐忧伤 阅读(275) 评论(0) 推荐(0) 编辑

摘要:将 directory1 合并到 directory2 中。Directory directory1 = FSDirectory.GetDirectory("index1", false);Directory directory2 = FSDirectory.GetDirectory("index2", false); IndexWriter writer = new IndexWriter(directory2, analyzer, false);writer.AddIndexes(new Directory[] { directory });Cons 阅读全文
posted @ 2011-07-21 10:34 放逐忧伤 阅读(328) 评论(0) 推荐(0) 编辑

摘要:使用 Filter 对搜索结果进行过滤,可以获得更小范围内更精确的结果。 举个例子,我们搜索上架时间在 2005-10-1 到 2005-10-30 之间的商品。 对于日期时间,我们需要转换一下才能添加到索引库,同时还必须是索引字段。document.Add(FieldDate, DateField.DateToString(date), Field.Store.YES, Field.Index.UN_TOKENIZED); Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-1"), Date 阅读全文
posted @ 2011-07-20 17:40 放逐忧伤 阅读(638) 评论(1) 推荐(0) 编辑