zoukankan      html  css  js  c++  java
  • WEBUS2.0 In Action

    上一篇: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", 20, 30);
    var q = q1 & q2; //此时效果和new BooleanQuery(q1, q2, QueryOperationType.AND)相同

    或者是更加复杂的情况:

    var q1 = new TermQuery("Name", "张三");
    var q2 = new RangeQuery("Age", 20, 30);
    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

  • 相关阅读:
    关于一些Spring MVC控制器的参数注解总结
    如何制作知识图谱
    关于本体的一些知识需要了解
    分享一些关于Lucene的心得
    java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    JAVA小游戏之两个物体碰撞产生的碰撞检测
    IT界程序员几大恶习能立即让你变穷,你有吗?
    JAVA图形界面常用知识点总会《代码分析》
    程序员解决问题的60个策略
    app微信支付-java服务端接口 支付-查询-退款
  • 原文地址:https://www.cnblogs.com/iamzyf/p/3209710.html
Copyright © 2011-2022 走看看