本文介紹如何在多種查詢場景下通過搜索索引查詢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';
查詢結果如下:
+---------------+ | 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 | 杭州 | 杭州市濱江區 |
+--------+-----+------+--------------+
文檔內容是否對您有幫助?