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