为了满足更多的查询检索需求,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 | 北京 | +---------+--------+-----+--------+--------------+------------------+------+
文档内容是否对您有帮助?