全文索引——CONTAINS 语法

本文介绍了SQL中CONTAINS语法的使用方法,演示了如何在表中进行全文本检索,包括基本查询、逻辑运算符使用、近义词及词形变化查询等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全文索引——CONTAINS 语法
我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。
我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。
1. 查询住址在北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
remark: beijing是一个单词,要用单引号括起来。
2. 查询住址在河北省的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province"' )
remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。
3. 查询住址在河北省或北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
remark: 可以指定逻辑操作符(包括 AND ,AND NOT,OR )。
4. 查询有 '南京路' 字样的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'nanjing NEAR road' )
remark: 上面的查询将返回包含 'nanjing road','nanjing east road','nanjing west road' 等字样的地址。
A NEAR B,就表示条件: A 靠近 B。
5. 查询以 '湖' 开头的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"hu*"' )
remark: 上面的查询将返回包含 'hubei','hunan' 等字样的地址。
记住是 *,不是 %。
6. 类似加权的查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。
7. 单词的多态查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
remark: 查询将返回包含 'street','streets'等字样的地址。
对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。
以上例子都使用英文,不使用中文是因为有的查询方式中文不支持,而且我的计算机是英文系统。
全文索引——CONTAINS 语法
我们通常在 WHERE 子句中使用 CONTAINS ,就象这样:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。

如果你在选定字段中查询一个匹配的直接使用
如:
从company中检查是否有test1的则:
select * from company
where contains(*,'test1')
如果要检查的是两个关键字,如是或地关系:
select * from company
where contains(*,'"北京" or "tttt"')
注意:关键字“北京”和“tttt”必须用"",包括起来,or代表两个关键字之间是"或"的关系
如果是与的关系:
select * from company
where contains(*,'"北京" and "tttt"')
如果是三个关键字则:
关键字前的那个or或者and 表示跟其他关键字的关系
and 表示两个词是靠近的

阅读全文
类别: sql ado 存储过程  查看评论

转载于:https://www.cnblogs.com/dreamontheway/archive/2010/08/19/1809962.html

### 多值索引与JSON数组通配符的使用方法 在处理JSON数据时,`json_extract` 和 `path` 的组合提供了强大的功能来访问嵌套结构的数据。当涉及到JSON数组时,可以通过通配符和多值索引来实现更灵活的操作。 #### 1. 使用通配符挖掘更多类型索引 对于复杂的JSON文档,尤其是包含多个层次的对象或数组,可以利用通配符(如 `*`, `[0..n]` 或其他模式匹配符号)来提取所需的信息。例如,在 MySQL 中,路径表达式的语法允许我们定义更加动态的选择器[^1]: ```sql SELECT JSON_EXTRACT('["apple", "banana", "cherry"]', '$[*]'); -- 返回 ["apple", "banana", "cherry"] ``` 上述例子展示了如何通过 `$[*]` 提取整个数组的内容。这里的星号 (`*`) 表示选取数组中的每一个元素。 #### 2. 创建基于JSON的多值索引 为了提高查询性能,特别是针对频繁读取的字段,可以考虑创建覆盖这些字段的索引。具体来说,MySQL 支持两种方式用于构建此类索引:一种是直接依赖于 `INDEX` 命令;另一种则是借助内置函数如 `JSON_CONTAINS` 或者 `JSON_CONTAINS_PATH` 来间接完成这一目标。 下面是一个简单的实例展示如何为含有 JSON 数组类型的列添加全文检索能力: ```sql CREATE TABLE products ( id INT PRIMARY KEY, details JSON NOT NULL, FULLTEXT (details) ); INSERT INTO products VALUES(1,'{"tags":["electronics","gadget"]}'); EXPLAIN SELECT * FROM products WHERE MATCH(details) AGAINST ('"electronics"' IN BOOLEAN MODE); ``` 此脚本首先声明了一个表并填充了一条记录,接着演示了怎样运用全文搜索技术定位那些其标签列表里包含了特定关键词的商品项。 #### 3. 访问JSON数组内的单个元素 除了批量获取外,有时也需要单独挑出某几个成员做进一步分析。此时可采用下标形式指定确切的位置参数 $[index]$ 进行精准定位[^2]: ```sql SET @j = '[true, false]'; SELECT JSON_UNQUOTE(JSON_EXTRACT(@j, '$[0]')); -- true SELECT JSON_TYPE(JSON_EXTRACT(@j, '$[1]')); -- BOOLEAN ``` 这里分别打印出了布尔型变量的第一个真实值及其第二个假定值的具体类别描述信息。 #### 4. 替换JSON数组中对象属性的方法 假设现在有一个需求是要更新现有数据库里的某些项目特性数值,则可通过结合 `JSON_SET`, `JSON_REPLACE` 等命令达成目的。另外还可以依靠之前提到过的辅助工具——即 `JSON_SEARCH` 函数先找到待改动的目标所在的确切地址再执行后续动作[^3]: ```sql UPDATE my_table SET data = JSON_SET(data, CONCAT('$[', idx, '].price'), new_price) WHERE JSON_SEARCH(data->>'$.items[*]', 'one', old_value) IS NOT NULL; ``` 以上语句片段旨在说明如何安全有效地调整商品价格清单里面对应条目当前售价的过程概览图景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值