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

  • 相关阅读:
    struts2基础
    javaEE环境搭建-eclipse
    geth
    redis常用命令
    angular-ui-select 下拉框支持过滤单选多选解决方案(系列一)
    angularjs中向html页面添加内容节点元素代码段的两种方法
    modal
    弹性布局
    自定义鼠标样式
    angularjs指令弹框点击空白处隐藏及常规方法
  • 原文地址:https://www.cnblogs.com/bonelee/p/6651290.html
Copyright © 2011-2022 走看看