• 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

  • 相关阅读:
    使用 jsPlumb 绘制拓扑图 —— 异步加载与绘制的实现
    改善记忆力的二十种记忆方法,随便你挑!
    怎样完成一次比较漂亮的晋升面试演讲
    产品运维的思考与总结
    Jtester+unitils+testng:DAO单元测试文件模板自动生成
    生活、工作和理想
    推荐《需求:缔造伟大商业传奇的根本力量》
    星光之旅
    谈读书
    生命之反思
  • 原文地址:https://www.cnblogs.com/bonelee/p/6651290.html
Copyright © 2020-2023  润新知