最近一直在研究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. js中toString和valueOf方法的区别

    toString 方法 返回对象的字符串表示形式. 语法:objectname.toString([radix]) objectname 必需.要为其搜索字符串表示形式的对象. radix 可选.为将 ...

  2. Hammer.js--转载自李林峰的园子

    一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...

  3. Equls 和==的区别

    对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true.对于 string ...

  4. linux下软件安装与升级

    待续 sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade

  5. 如何修改WAMP中mysql默认空密码

      WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按 ...

  6. 自定cordova插件笔记demo

    1.在项目根目录下(我的是com.chl),添加一个文件夹,在文件夹里添加src.www两个子文件夹和plugin.xml文件.在www目录下,创建test.js.在src文件夹下添加android子 ...

  7. MySql 的常用优化

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  8. 从返回值未报错得到的对于java finally理解

    不多说了,直接看图 这个代码来自<深入理解java虚拟机(第二版)>,我在eclipse中编辑的,但是没有报错,一般来说,没有返回值,eclipse都会有个提示或者报错啥的,但是这个没有, ...

  9. SQL 查询两个字段相同表的不同记录

    select b.NativeName from sanleiDB.dbo.Dictionary_Native b where not EXISTS (select a.NativeName from ...

  10. jsp脚本元素

    在JSP页面中有三种脚本元素(Scripting Elements):声明.小脚本和表达式. 声明(declaration)用来在JSP页面中声明变量和定义方法.声明是以<%!开头,以%> ...