上一篇:WEBUS2.0 In Action - 搜索操作指南(1) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(3)

2. 使用Query

Query是所有查询的基类, 它一共有如下7种实现, 这些实现都在Webus.Search.Queries命名空间下面:

类型 描述 范例
TermQuery 字段关键词查询, 提供字段名和关键词即可进行查询.

//查找所有名字为"张三"的记录

new TermQuery("Name", "张三");

PostfixQuery 关键词后缀查询, 提供字段名和关键词后缀即可进行查询. 

//查找所有名字以"三"结尾的记录

new PostfixQuery("Name", "三");

PrefixQuery 关键词前缀查询, 提供字段名和关键词前缀即可进行查询.

//查找所有名字以"张"开头的记录

new PrefixQuery("Name", "张");

RangeQuery 范围查询, 提供字段名, minValue和maxValue即可进行查询. 

//查找所有年龄在20-30之间的记录

new RangeQuery("Age", 20, 30);

RegexQuery 正则表达式查询, 提供字段名和用于匹配的正则表达式即可进行查询. 

//查找所有名字为两个字的记录

new RegexQuery("Name", @"\w{2}");

WildcardQuery 关键词通配符查询, 提供字段名和用于匹配的通配符即可进行查询.

//查找所有名字中包含"建"的记录

new WildcardQuery("Name", "建");

BooleanQuery 用于对两个Query进行逻辑组合, 并生成查询表达式树.

//查找所有年龄在20-30之间的张三

var q1 = new TermQuery("Name", "张三");

var q2 = new RangeQuery("Age", 20, 30);

var q = new BooleanQuery(q1, q2, QueryOperationType.AND);

为了在代码中更加灵活的使用这7中查询, 我对Query进行了操作符重载, 使其具备了逻辑运算的能力, 比如:

var q1 = new TermQuery("Name", "张三");
var q2 = new RangeQuery("Age", , );
var q = q1 & q2; //此时效果和new BooleanQuery(q1, q2, QueryOperationType.AND)相同

或者是更加复杂的情况:

var q1 = new TermQuery("Name", "张三");
var q2 = new RangeQuery("Age", , );
var q3 = new RegexQuery("Name", @"\w{2}");
var q = (q1 & q2) | q3;

这里生成的还是一个BooleanQuery, 但是其内部结构是一个查询表达式树:

怎么样? 是不是很容易理解而且比前面一章中介绍的IQueriable内置的搜索功能强大很多? 其实Query们只是起一个构造和存储查询表达式的作用, 具体的功能还得IndexSearcher来实现. 不过这一步同样来得非常简单:

IQueriable index;
//... init & open index
ISearcher se = new IndexSearcher(index);
var result = se.Search(q);

即可!

随文做个小宣传 :) - WEBUS2.0 SDK是一款与Lucene.NET类似的搜索引擎开发组件. 它是完全.NET原生态作品, 没有像Lucene.NET等java移植作品的版本更新慢, bug修正慢的缺点; 它利用独创的BHS和BL作为核心存储介质, 性能毫不逊色Lucene, 而是更胜一筹; 它设计理念先进, 吸收各家之长, 使用起来更加亲切, 轻松. 不愧是.NET居家开发之实用利器, ...$)@#*)@#@) ~~~...

相关信息及WEBUS2.0 SDK下载:继续我的代码,分享我的快乐 - WEBUS2.0

WEBUS2.0 In Action - 搜索操作指南 - (2)的更多相关文章

  1. WEBUS2.0 In Action - 搜索操作指南 - (1)

    上一篇:WEBUS2.0 In Action - 索引操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(2) 1. IQueriable中内置的搜索功能 在Webus ...

  2. WEBUS2.0 In Action - 搜索操作指南 - (3)

    上一篇:WEBUS2.0 In Action - 搜索操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(4) 3. 评分机制 (Webus.Search.IHitSc ...

  3. WEBUS2.0 In Action - 搜索操作指南 - (4)

    上一篇:WEBUS2.0 In Action - 搜索操作指南(3) 6. 搜索多个索引 为了提升性能, 我们可以从多个索引同时进行搜索, Webus.Search.MultiSearcher提供了相 ...

  4. WEBUS2.0 In Action - 索引操作指南(2)

    上一篇:WEBUS2.0 In Action - 索引操作指南(1) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(1) 3. 添加.删除.撤销删除和修改文档 在WEBUS中要将 ...

  5. WEBUS2.0 In Action - [源代码] - C#代码搜索器

    最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...

  6. 第二篇——Struts2的Action搜索顺序

    Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action     1.判断package是否存在,例如:/pat ...

  7. Struts2学习三----------Action搜索顺序

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2的Action的搜索顺序 http://localhost:8080/path1/path2/student.action 1)判断pa ...

  8. Struts2.0 去掉action后缀名

    刚刚接触Struts2.0,发现默认请求都会带着后缀名:action 就如下图,url地址中会暴露login.action(请原谅struts拼写错误..) 作为一个URL简洁爱(chu)好(nv)者 ...

  9. 帝国cms7.0修改默认搜索模版中的分页[!--show.page--]

    修改默认搜索模版的分页是在e/class/connect.php下 搜索下function page1就是我们要修改的分页了 下面贴上我修改后的分页 //前台分页 function page1($nu ...

随机推荐

  1. (11)nehe教程5---3D空间

    3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D ...

  2. 妙味课堂——HTML+CSS(第三课)

    常见标签我已经在上一篇文章中提及,我们做前端设计时,主要也是用这些标签(最常用的). 然而有一个问题,就是有的标签都有自己的默认样式.试通过如下代码来说明: <!DOCTYPE html> ...

  3. python编写规范

    一.说明 二.内容 1. 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行... 1.5 编码... 2. 语句... 2.1 标准头部... 2.2 导入(i ...

  4. Linux命令(3):wc命令

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  5. JavaScript ECAMScript5 新特性——get/set访问器

    之前对get/set的理解一直有误,觉得get set 是对象属性方法.看了别人的博客也有很多疑问,今天系统的做了很多测试终于弄明白了.(自己通过看书和写demo测试的,如有不对欢迎大家批评指正) g ...

  6. Java Map各遍历方式的性能比较

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的 ...

  7. 实际操作中命令 su 与 sudo 的区别(转)

    ------------------------------------------------------------------------------------------------ 首先我 ...

  8. openstack配置注意事项(主要是网络相关)

    vlan协议应该配置为802.1q,另一个容易混淆的为ISL,配置命令为 switchport trunk encapsulation dot1q /islswitchport mode trunk ...

  9. React getInitialState desc

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. arcgis javascript dojo

    一.为什么说ArcGIS API for JavaScript是构建于Dojo之上的? 1. 编写ArcGIS API for JavaScript的ESRI开发者使用Dojo来简化他们的开发过程,同 ...