本文介绍如何在多种查询场景下通过搜索索引查询Lindorm宽表数据,包括多维查询、排序翻页、分词查询、模糊查询和聚合分析。

前提条件

多维查询

执行以下语句实现多维查询。
SELECT * FROM search_table WHERE gender='M' AND city='杭州' OR city='北京';
查询结果如下:查询结果1
SELECT * FROM search_table WHERE age > 30 AND city != '杭州';
查询结果如下:查询结果2

排序翻页

  • 搜索索引支持通过limit或者offset方式进行数据翻页,执行以下语句实现数据翻页查询。
    SELECT * FROM search_table  WHERE gender='M' LIMIT 1,10;
    查询结果如下:查询结果3
  • 搜索索引支持任意列的排序,执行以下语句实现数据排序查询。
    SELECT * FROM search_table  WHERE gender='M' ORDER BY age DESC;
    查询结果如下:查询结果5

分词查询

分词查询的列使用=查询,示例如下:address列是分词字段,执行以下语句查询age的范围在(10,50]并且address在余杭区的数据。
SELECT * FROM search_table WHERE age > 10 AND age <= 50 AND address='余杭区';
查询结果如下:查询结果99

模糊查询

执行以下语句查询email列中包含example的数据。
SELECT * FROM search_table WHERE email LIKE '%example%';
查询结果如下:查询结果6
说明 模糊查询的性能受限于表的数据量,推荐使用分词查询。

聚合分析

搜索索引支持常用的聚合函数,例如COUNT、SUM、AVG、MIN、MAX。同时,搜索索引也支持DISTINCT和GROUP BY功能。
  • 执行以下语句,查询city杭州的数据的总数。
    SELECT COUNT(*) FROM search_table WHERE city='杭州';
    查询结果如下:查询结果7
  • 执行以下语句,实现数据统计去重查询。
    SELECT distinct(age) FROM search_table WHERE gender='M';
    查询结果如下:distinct
  • 执行以下语句,实现分组查询。
    SELECT city,count(*) as cnt FROM search_table WHERE gender='M' GROUP BY city ORDER BY cnt DESC;
    查询结果如下:groupby
说明 聚合查询时,如果未指定WHERE条件,将无法命中搜索索引。此时可以在WHERE关键字前添加force index(search_index_name) 语句,强制使用搜索索引。更多说明,请参见SELECT语法

短语匹配查询

执行以下语句,实现短语匹配查询。
SELECT name,age,city,address FROM search_table WHERE age > 1 AND age < 100 AND address = '"北京朝阳"' ;
查询结果如下:短语匹配