zoukankan      html  css  js  c++  java
  • sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY

    原生API提供的匹配筛选、排序和分组配置和SQL语法提供的WHERE、ORDER BY和GROUP BY语句的效果是一样的,你可以对匹配结果进行你需要的筛选、排序和分组匹配。例如,如果你要搜索MySQL中1990年代的书籍,并按照价格排序,可以这么写:

     
    1. $cl = new SphinxClient();
    2. $cl->SetFilterRange("year_published", 1990, 1999);
    3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
    4. $result = $cl->Query("mysql", "booksindex");

    上述代码不仅一目了然而且也展示了通用API的使用模式:首先创建一个客户端对象,配置所有查询设置,然后启动搜索并获取结果。当然,产品级的代码应当添加错误处理:

     
    1. $cl = new SphinxClient();
    2. $cl->SetFilterRange("year_published", 1990, 1999);
    3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
    4. $result = $cl->Query("mysql", "booksindex");
    5. if (!$result)
    6. {
    7. // oops, there was an error
    8. DisplayErrorPage($cl->GetLastError());
    9. } else
    10. {
    11. // everything was good
    12. DisplaySearchResult($result);
    13. }

    为了进一步完善,让我们也看看如何使用原生API来对年份来分组和计算数据:

     
    1. $cl = new SphinxClient();
    2. $cl->SetFilterRange("year_published", 1990, 1999);
    3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
    4. $cl->SetGroupBy("year_published", SPH_GROUPBY_ATTR);
    5. $cl->SetSelect("*, MIN(price) AS minprice,
    6. MAX(price) AS maxprice, AVG(price) AS avgprice");
    7. $result = $cl->Query("mysql", "booksindex");

    你会发现,当我们进一步地为查询添加更多的处理时,代码也开始越来越像SQL了。但我们用的是零散的接口而不是单一的表达式来构建查询的。

     

    摘自:https://www.zybuluo.com/lxjwlt/note/141406

  • 相关阅读:
    160922、配置:spring通过profile或@profile配置不同的环境(测试、开发、生产)
    160921、React入门教程第一课--从零开始构建项目
    160920、springmvc上传图片不生成临时文件
    160919、使用AOP与注解记录Java日志
    160918、BigDecimal运算
    160914、ionic指令简单布局
    Oracle 修改文件所有者
    Oracle 新增删除账户
    Oralce 账户被锁后的解决办法
    Linux Oracle 转换编码格式
  • 原文地址:https://www.cnblogs.com/bonelee/p/6651290.html
Copyright © 2011-2022 走看看