本文介绍如何在多种查询场景下通过搜索索引查询Lindorm宽表数据,包括多维查询、排序翻页、分词查询、模糊查询和聚合分析。
前提条件
已通过Lindorm-cli连接宽表引擎。具体操作,请参见通过Lindorm-cli连接并使用宽表引擎。
已准备测试数据并创建搜索索引。具体内容,请参见管理搜索索引。
多维查询
执行以下语句实现多维查询。
示例一
SELECT * FROM search_table WHERE gender='M' AND city='杭州' OR city='北京';
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 1 | 张先生 | 18 | M | 北京市朝阳区 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
示例二
SELECT * FROM search_table WHERE age > 30 AND city != '杭州';
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 28 | 陈女士 | 36 | F | 深圳市南山区 | a***@example.net | 深圳 | +---------+--------+-----+--------+--------------+------------------+------+
排序翻页
搜索索引支持任意列的排序,执行以下语句实现数据排序查询。
SELECT * FROM search_table WHERE gender='M' ORDER BY age DESC;
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 6 | 李先生 | 32 | M | 杭州市余杭区 | a***@example.net | 杭州 | | 20 | 王先生 | 28 | M | 杭州市滨江区 | a***@example.net | 杭州 | | 1 | 张先生 | 18 | M | 北京市朝阳区 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
搜索索引支持通过
limit
或者offset
方式进行数据翻页,执行以下语句实现数据翻页查询。SELECT * FROM search_table WHERE gender='M' ORDER BY age DESC LIMIT 1,10;
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 20 | 王先生 | 28 | M | 杭州市滨江区 | a***@example.net | 杭州 | | 1 | 张先生 | 18 | M | 北京市朝阳区 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
分词查询
分词查询的列使用=
查询,示例如下:address
列是分词字段,执行以下语句查询age
的范围在(10,50]
并且address
在余杭区的数据。
SELECT * FROM search_table WHERE age > 10 AND age <= 50 AND address='余杭区' ORDER BY user_id;
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+
| user_id | name | age | gender | address | email | city |
+---------+--------+-----+--------+--------------+------------------+------+
| 1 | 张先生 | 18 | M | 北京市朝阳区 | a***@example.net | 北京 |
| 6 | 李先生 | 32 | M | 杭州市余杭区 | a***@example.net | 杭州 |
| 20 | 王先生 | 28 | M | 杭州市滨江区 | a***@example.net | 杭州 |
+---------+--------+-----+--------+--------------+------------------+------+
模糊查询
执行以下语句查询email
列中包含example的数据。
SELECT * FROM search_table WHERE email LIKE '%example%' ORDER BY user_id;
查询结果如下:
+---------+--------+-----+--------+--------------+------------------+------+
| user_id | name | age | gender | address | email | city |
+---------+--------+-----+--------+--------------+------------------+------+
| 1 | 张先生 | 18 | M | 北京市朝阳区 | a***@example.net | 北京 |
| 6 | 李先生 | 32 | M | 杭州市余杭区 | a***@example.net | 杭州 |
| 20 | 王先生 | 28 | M | 杭州市滨江区 | a***@example.net | 杭州 |
| 28 | 陈女士 | 36 | F | 深圳市南山区 | a***@example.net | 深圳 |
+---------+--------+-----+--------+--------------+------------------+------+
说明
模糊查询的性能受限于表的数据量,推荐使用分词查询。
聚合分析
搜索索引支持常用的聚合函数,例如COUNT、SUM、AVG、MIN、MAX。同时,搜索索引也支持DISTINCT和GROUP BY功能。
执行以下语句,查询
city
为杭州
的数据的总数。SELECT COUNT(*) FROM search_table WHERE city='杭州';
查询结果如下:
+----------+ | EXPR$0 | +----------+ | 2 | +----------+
执行以下语句,实现数据统计去重查询。
SELECT distinct(age) FROM search_table WHERE gender='M' ORDER BY user_id;
查询结果如下:
+---------------+ | DISTINCT(age) | +---------------+ | 18 | | 28 | | 32 | +---------------+
执行以下语句,实现分组查询。
SELECT city,count(*) AS cnt FROM search_table WHERE gender='M' GROUP BY city ORDER BY cnt DESC;
查询结果如下:
+------+-----+ | city | cnt | +------+-----+ | 杭州 | 2 | | 北京 | 1 | +------+-----+
说明
聚合查询时,如果未指定WHERE条件,将无法命中搜索索引。此时可以在WHERE关键字前添加force index(search_index_name)
语句,强制使用搜索索引。更多说明,请参见SELECT语法。
短语匹配查询
执行以下语句,实现短语匹配查询。
SELECT name,age,city,address FROM search_table WHERE age>1 AND age<100 AND address='"杭州"' ORDER BY user_id;
查询结果如下:
+--------+-----+------+--------------+
| name | age | city | address |
+--------+-----+------+--------------+
| 李先生 | 32 | 杭州 | 杭州市余杭区 |
| 王先生 | 28 | 杭州 | 杭州市滨江区 |
+--------+-----+------+--------------+
文档内容是否对您有帮助?