lucene.net 使用过程中的 几个注意事项

几个注意事项
1.建立索引时 插入的顺序(不设置document和字段的boost) 会影响到 查询结果的默认排序,建议:将最新生成的文章 最后建索引 这样 查询结果首先显示的是 最后插入的数据
2.BooleanQuery的多条件查询 一定是多个 must的组合,否则就不是 and关系了,如下代码:
3.查询时候亦可对 结果进行权重排序,通过设置Query的Boost属性即可,如下述代码所示
4.查询时,通常首先对关键词进行分词处理之后,再设置为多个分词的 查询条件,如下代码这一部分 foreach (var wordInfo in words)

5.建立索引时 分词被索引时 不区分大小写,也就是 你在查询的时候 必须按照 指定的大小写 查询,如果想解决这个大小写问题:建立索引时 多建一个统一小写的filed吧,查询时 也用小写后的关键词进行分词

//多字段查询三
Query query1 = null;
var mQuery = new BooleanQuery();
//分类查询
query1 = new TermQuery(new Term("type", type));
mQuery.Add(query1, Occur.MUST);
//通配符查询
if (string.IsNullOrEmpty(lang)) lang = "*";
query1 = new WildcardQuery(new Term("lang", lang));
mQuery.Add(query1, Occur.MUST);
//范围查询
var beginTime = Convert.ToInt64(TimeHelper.ToUnixTimeStamp(DateTime.Now.AddYears(-3)));
var endTime = Convert.ToInt64(TimeHelper.ToUnixTimeStamp(DateTime.Now.AddYears(0)));
query1 = NumericRangeQuery.NewLongRange("time", 1, beginTime, endTime, true, true);
mQuery.Add(query1, Occur.MUST);
var keyQuery = new BooleanQuery();
foreach (var wordInfo in words)
{
//标题查询
query1 = new TermQuery(new Term("title", wordInfo.Word)) { Boost = 200 };
keyQuery.Add(query1, Occur.SHOULD);
//内容查询
query1 = new TermQuery(new Term("body", wordInfo.Word)) { Boost = 2 };
keyQuery.Add(query1, Occur.SHOULD);
}
if(keyQuery.Any())mQuery.Add(keyQuery,Occur.MUST);
TopDocs tds = searcher.Search(mQuery, 10);
时间: 2024-10-21 14:47:57

lucene.net 使用过程中的 几个注意事项的相关文章

Lucene索引过程中的内存管理与数据存储

Lucene的索引过程分两个阶段,第一阶段把文档索引到内存中:第二阶段,即内存满了,就把内存中的数据刷新到硬盘上.          倒排索引信息在内存存储方式 Lucene有各种Field,比如StringField,TextField,IntField,FloatField,DoubleField-,Lucene在处理的过程中把各种Field都处理成相应的byte[],以最本质的方式来看待各种Field的内容,统一了数据的存储形式. 在写入内存阶段,第一步就是需要理清各个类之间的关系. 在索

理解Lucene索引与搜索过程中的核心类

理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.?Directory.?Analyzer.?Document.?Field 1.IndexWriter IndexWriter(写索引)是索引过程的核心组件,这个类负责创建新的索引,或者打开已有的索引,以及向索引中添加.删除或更新被索引文档的信息,但不能读取或搜索索引.IndexWriter需要开辟一定的空间来存储索引,该功能由Directory完成 2.Directory /** A Directory is a

Lucene的分析过程

转自:http://www.open-open.com/lib/view/open1348033848724.html Lucene的分析过程 回顾倒排索引的构建 收集待建索引的原文档(Document) 将原文档传给词条化工具(Tokenizer)进行文本词条化 将第二步得到的词条(Token)传给语言分析工具(Linguistic modules)进行语言学预处理,得到词项(Term) 将得到的词项(Term)传给索引组件(Indexer),建立倒排索引 注:详细文档->倒排索引的理论过程见

Lucene索引创建过程

一,Lucene建索引API 二,创建IndexWriter 三,创建Document 四,添加Document 1  Lucene使用场景 2  重要的几个基础类 2.1  DocumentsWriterPerThreadPool 2.2 ThreadState 2.3  DocumentsWriterPerThread 2.4  DocumentsWriterFlushControl 2.5  FlushPolicy 3  docWriter.updateDocument 4  docWri

lucene的搜索过程(索引文件)

---恢复内容开始--- 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 如图: 总共包含以下几个过程: index打开索引文件,读取并打开指向索引文件的流. 用户输入查询语句. 将查询语句转为查询对象Query对象树.(从luke中可以看出来) 构造weight对象树,用于计算词的权重,也即计算打分公司中与搜索语句有关,与文档无关的部分(红色部分). 构造Score对象树,用于计算打分. 在构造score对象树的过程

ELK部署和过程中的报错汇总

一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 1.1.2 elasticsearch几个重要术语 NRT elasticsea

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Android APP 调试过程中遇到的问题. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007192169/AndroidAPP调试过程中遇到的问题.html

机器学习算法推导过程中的数据基础知识

1.向量.矩阵求导 当然了,这里补充一下求解过程中的关于向量.矩阵求导的几个公式: 这里其实只需要明白第一个,后边的三个都可以由第一个简单的推导而来. 注意这里对列向量AX的每一项的求导写为行,不然就会得到一个超越矩阵,我们不采用这种方式.

编译过程中,termcap.h 文件找不到路径 licli.a终于生成

编译过程中,termcap.h      文件找不到路径 查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termcap.h  发现一篇文章,如下 ----------------------------------------------------------------------------------------- 安装minicom2.3出现termcap.h错误解决方法 2010-05-06 17:12: