WEBUS2.0 In Action - 搜索操作指南 - (2)
上一篇: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)的更多相关文章
- WEBUS2.0 In Action - 搜索操作指南 - (1)
上一篇:WEBUS2.0 In Action - 索引操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(2) 1. IQueriable中内置的搜索功能 在Webus ...
- WEBUS2.0 In Action - 搜索操作指南 - (3)
上一篇:WEBUS2.0 In Action - 搜索操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(4) 3. 评分机制 (Webus.Search.IHitSc ...
- WEBUS2.0 In Action - 搜索操作指南 - (4)
上一篇:WEBUS2.0 In Action - 搜索操作指南(3) 6. 搜索多个索引 为了提升性能, 我们可以从多个索引同时进行搜索, Webus.Search.MultiSearcher提供了相 ...
- WEBUS2.0 In Action - 索引操作指南(2)
上一篇:WEBUS2.0 In Action - 索引操作指南(1) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(1) 3. 添加.删除.撤销删除和修改文档 在WEBUS中要将 ...
- WEBUS2.0 In Action - [源代码] - C#代码搜索器
最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...
- 第二篇——Struts2的Action搜索顺序
Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action 1.判断package是否存在,例如:/pat ...
- Struts2学习三----------Action搜索顺序
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2的Action的搜索顺序 http://localhost:8080/path1/path2/student.action 1)判断pa ...
- Struts2.0 去掉action后缀名
刚刚接触Struts2.0,发现默认请求都会带着后缀名:action 就如下图,url地址中会暴露login.action(请原谅struts拼写错误..) 作为一个URL简洁爱(chu)好(nv)者 ...
- 帝国cms7.0修改默认搜索模版中的分页[!--show.page--]
修改默认搜索模版的分页是在e/class/connect.php下 搜索下function page1就是我们要修改的分页了 下面贴上我修改后的分页 //前台分页 function page1($nu ...
随机推荐
- C#索引器及示例
public class IndexSeletor<T> where T:struct { private List<T> _listObj; public IndexSele ...
- Solr笔记--转载
Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇分两部分的文章中,Lucene Java™ 的提交人 Grant Ingersoll ...
- 分布式数据存储 - MySQL双主复制
上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...
- **关于PHP如何定义一个空对象(REST API如何处理空对象和空数组)
在写接口的过程当中,手机端有需求说不让返回json数组,要返回一个对象. 那么我们可以怎么做呢? 其实很简单,强制转换即可. 声明空对象: $empty_object=(object)array(); ...
- typedef (还需经常看看加深理解)
看了 c++primer 1,typedef名字 typedef定义以关键字typedef开始,后面是 数据类型+标示符. 并未引入新的类型,只是现有数据类型的同义词 例: typedef doubl ...
- HDU5568/BestCoder Round #63 (div.2) B.sequence2 dp+高精度
sequence2 Problem Description Given an integer array bi with a length of n, please tell me how many ...
- 李洪强漫谈iOS开发[C语言-005]-程序结构分析
- lintcode:整数排序||
题目 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法. 解题 归并排序 public class Solution { /** * @param ...
- Android TextView 文字居中
有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity( ...
- PHP高级特性二之文件处理
PHP中的文件处理也是一个相当重要的模块,这一篇的主要内容就是PHP中文件系统的简介. 文件系统用途 1. 项目处理都离不开文件处理 2. 可以用文件长时间保存数据 3. 建立缓存,在服务器中进行文件 ...