為了滿足更多的查詢檢索需求,SELECT查詢語句中支持search_query
關鍵字,使用與Lucene(全文檢索引擎工具包)查詢語法相似。本文介紹通過search_query
關鍵字查詢數據的使用示例。
前提條件
已開通云原生多模數據庫 Lindorm實例的搜索索引服務,具體操作請參見開通搜索索引。
已通過Lindorm-cli連接Lindorm寬表引擎,具體操作請參見通過Lindorm-cli連接并使用寬表引擎。
Lindorm寬表引擎小版本為2.2.17及以上,關于升級小版本的操作請參見升級小版本。
已準備測試數據并創建搜索索引,詳情請參見管理搜索索引。
語法
SELECT selectors
FROM table
WHERE (search_query = 'search_expression')
[ LIMIT n ];
示例
OR
邏輯查詢SELECT * FROM search_table WHERE search_query = 'name:陳女士 age:[40 TO 60]';
與以下語句功能相同。
SELECT * FROM search_table WHERE name='陳女士' OR (age >= 40 AND age <= 60);
返回結果:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 28 | 陳女士 | 36 | F | 深圳市南山區 | a***@example.net | 深圳 | +---------+--------+-----+--------+--------------+------------------+------+
AND
邏輯查詢SELECT * FROM search_table WHERE search_query = '+name:張先生 +age:[10 TO 40]';
與以下語句功能相同。
SELECT * FROM search_table WHERE name='張先生' AND (age >= 10 AND age <= 40);
返回結果:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 1 | 張先生 | 18 | M | 北京市朝陽區 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
聚合統計
SELECT count(*) FROM search_table WHERE search_query = 'age:[10 TO 40]';
返回結果:
+----------+ | COUNT(*) | +----------+ | 4 | +----------+
分詞查詢
SELECT * FROM search_table WHERE search_query='address:北京';
返回結果:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 1 | 張先生 | 18 | M | 北京市朝陽區 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
結果排序。如果需要按照指定的
age
字段進行排序,請執行以下語句。SELECT * FROM search_table WHERE search_query='{"q":"address:杭州", "sort":"age asc"}';
說明上述語句中
q
和sort
為系統關鍵字,不需要修改。返回結果:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 20 | 王先生 | 28 | M | 杭州市濱江區 | a***@example.net | 杭州 | | 6 | 李先生 | 32 | M | 杭州市余杭區 | a***@example.net | 杭州 | +---------+--------+-----+--------+--------------+------------------+------+
Elasticsearch兼容語法。
SELECT * FROM search_table WHERE search_query='{"query": { "bool": { "must": { "match": { "address": "北京" } } } } }';
與以下語句功能相同。
SELECT * FROM search_table WHERE address='北京';
返回結果:
+---------+--------+-----+--------+--------------+------------------+------+ | user_id | name | age | gender | address | email | city | +---------+--------+-----+--------+--------------+------------------+------+ | 1 | 張先生 | 18 | M | 北京市朝陽區 | a***@example.net | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
文檔內容是否對您有幫助?