最近一直在研究lucene,目的是想让网站实现像搜索引擎那样的搜索,可以快速、准确的帮用户查询出想要的结果。废话不多说,上代码实例:

1.利用BooleanQuery进行多条件搜索(比较灵活)
 
Lucene.Net.Search.BooleanQuery boolQuery = new Lucene.Net.Search.BooleanQuery();
 
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("title", pgAnalyzer);
boolQuery.Add(parser.Parse(this.txtKeywords.Text), Lucene.Net.Search.BooleanClause.Occur.MUST);
 
parser = new Lucene.Net.QueryParsers.QueryParser("productsummary", pgAnalyzer);
boolQuery.Add(parser.Parse(this.txtKeywords.Text), Lucene.Net.Search.BooleanClause.Occur.SHOULD);
Lucene.Net.Search.Hits hits = search.Search(boolQuery);
在这里,首先是初始化一个BooleanQuery对象,然后它有一个方法,是需要两个参数,一个是Lucene.Net.Search.Query对象,另一个是Lucene.Net.Search.BooleanClause.Occur枚举。第一个参数不难理解,着重说明第二个参数,它表示的是传入进来的搜索,应该以怎样的方式进行搜索,这里Occur枚举有几种类型,MUST、MUST_NOT、SHOULD,MUST表示,要搜索的词在指定的字段里(Query对象以指定)必须出现,而MUST_NOT则是完全相反的,SHOULD表示可出现可不出现,这样的话,意思就很容易懂了,第一个是表示说我要搜索的词,在Title 这个字段中,必须要出现的,而第二个则说明,在productsummary这个字段中,可出现可不出现。。。这样检索出来的结果就是,在Title中必须出现而在productsummary可有可无的结果集合。。
 
2.利用 MultiFieldQueryParser
string[] fileds = { "title", "productsummary" };
Lucene.Net.Search.BooleanClause.Occur[] occurs = new Lucene.Net.Search.BooleanClause.Occur[] { Lucene.Net.Search.BooleanClause.Occur.MUST, Lucene.Net.Search.BooleanClause.Occur.SHOULD };
 
Lucene.Net.Search.Query query = Lucene.Net.QueryParsers.MultiFieldQueryParser.Parse(this.txtKeywords.Text, fileds, occurs, pgAnalyzer);
Lucene.Net.Search.Hits hits = search.Search(query);
 
经过搜索测试,两者的结果是一样的,但是有个疑问的是,MultiFieldQueryParser.parse方法,传入的查询关键词数组,字段数组,occur数组,长度要一致,这个经过测试了几次,确实是这样子,可以查一个词,但是字段和occur要长度一致,大概是要进行一一匹配起来,这个可以做多个测试进行猜想,MultiFieldQueryParser应该是封装了BooleanQuery,使其代码更简洁,更容易操作。。

Lucene.net 多条件查询搜索的更多相关文章

  1. lucene多条件查询”搜索—BooleanQuery

    /** * “多条件查询”搜索—BooleanQuery * BooleanQuery也是实际开发过程中经常使用的一种Query. * 它其实是一个组合的Query,在使用时可以把各种Query对象添 ...

  2. 使用Lucene.net+盘古分词实现搜索查询

    这里我的的Demo的逻辑是这样的:首先我基本的数据是储存在Sql数据库中,然后我把我的必需的数据推送到MongoDB中,这样再去利用Lucene.net+盘古创建索引:其中为什么要这样把数据推送到Mo ...

  3. Lucene之模糊、精确、匹配、范围、多条件查询

    Lucene的查询方式很 丰富,对于数值类型的数据,采取TermRangeQuery的方式,对于String类型的,就可以采取TermQuery等,查询方式了,可以通过采取合适的查询方式,检索到数据. ...

  4. Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索

    Lucene 的四大索引查询  清单1:使用布尔操作符 Java代码      //Test boolean operator blic void testOperator(String indexD ...

  5. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  6. 第四部分 数据搜索之使用HBASE的API实现条件查询

    因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...

  7. Lucene实现索引和查询

    0引言 随着万维网的发展和大数据时代的到来,每天都有大量的数字化信息在生产.存储.传递和转化,如何从大量的信息中以一定的方式找到满足自己需求的信息,使之有序化并加以利用成为一大难题.全文检索技术是现如 ...

  8. Lucene 06 - 使用Lucene的Query API查询数据

    目录 1 Query对象的创建(方式一): 使用子类对象 1.1 常用的Query子类对象 1.2 常用的Query子类对象使用 1.2.1 使用TermQuery 1.2.2 使用NumericRa ...

  9. 整合hibernate的lucene大数据模糊查询

      大数据模糊查询lucene 对工作单使用 like模糊查询时,实际上 数据库内部索引无法使用 ,需要逐条比较查询内容,效率比较低在数据量很多情况下, 提供模糊查询性能,我们可以使用lucene全文 ...

随机推荐

  1. Swing图形用户界面

    package test; import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.s ...

  2. strlen(); strcpy(); strcat(); strcmp() ---笔记

    指针小知识点: int a =10; int *p=&a; int *q=p;        //p中保存的是a的地址 int *q=p;       //将p的值赋给q 作用是让q也指向a ...

  3. Chromuim proxy Api 提取代里proxy调用Chrome隐身多窗口 多COOKIE 工具

    Chromuim proxy Api提取proxy调用Chrome隐身 多COOKIES 多窗口工具每一个代理拥有一个独立的窗口和USERDATA 独立COOKIES 伪装UA UA:<scri ...

  4. Codeforces Round #294 (Div. 2) D. A and B and Interesting Substrings

    题意: 对于26个字母 每个字母分别有一个权值 给出一个字符串,找出有多少个满足条件的子串, 条件:1.第一个字母和最后一个相同,2.除了第一个和最后一个字母外,其他的权和为0 思路: 预处理出sum ...

  5. 如何在JAVA中实现一个固定最大size的hashMap

    如何在JAVA中实现一个固定最大size的hashMap 利用LinkedHashMap的removeEldestEntry方法,重载此方法使得这个map可以增长到最大size,之后每插入一条新的记录 ...

  6. clang编译器简介

    本文部分内容引用: 中文维基百科. 结构化编译器前端--clang介绍. 什么是clang编译器? clang是LLVM编译器工具集的一个用于编译C.C++.Objective-C的前端.LLVM项目 ...

  7. spring加载bean实例化顺序

    问题来源: 有一个bean为 A,一个bean为B.想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值. 如果只是在A里单纯的写着: private B b;private ...

  8. Java-instanceof关键字

    一.instanceof 在编写代码过程中,如果不知道一个对象属于哪一个类,这时instanceof关键字起到决定性作用,他会以boolean(true\false)反馈结果 class A{ pub ...

  9. hosts 文件妙用

        127.0.0.1  localhost  www.baidu.com  www.126.com  www.xiaoxiao.com 1: 如果在hosts文件中加入这句话,则localhos ...

  10. 扩展Redis的Lua调用方式

    Redis是支持Lua脚本的,但是我以为并不方便. 1. SCRIPT LOAD一个字符串拿到一个SHA,首先这个Lua script脚本就很难拿到.Linux一般用cat什么的.但是你作为PHP怎么 ...