MySQL组合查询,全文本搜索

MySQL组合查询,全文本搜索

  1. 使用UNION进行组合查询:举一个例子,假如需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。当然,可以利用WHERE子句来完成此工作,不过这次我们将使用UNION。如果用where语句,则为:select vend_id, prod_id, prod_price from products where prod_price <=5 or vend_id in (1001, 1002); 用UNION则为:select vend_id, prod_id, prod_price from products where prod_price <=5 UNION select vend_id, prod_id, prod_price from products where vend_id in (1001, 1002); 其中会去掉重复的行,如果不去掉重复的行,则使用 UNION ALL
  2. 全文本搜索:select note_text from productnotes where match(note_text) against('rabbit'); 此语句也可以用like完成:select note_text from productnotes where note_text like '%rabbit%'; 全文本搜索排序(包含词rabbit作为第3个词的行的等级比作为第20个词的行高):select note_text match(note_text) against('rabbit') AS rank from productnotes;
  3. 查询扩展:select note_text from productnotes where match(note_text) against('anvils' with query expansion); (这次返回了7行。第一行包含词anvils,因此等级最高。第二行与anvils无关,但因为它包含第一行中的两个词(customer 和recommend),所以也被检索出来。第3行也包含这两个相同的词,但它 们在文本中的位置更靠后且分开得更远,因此也包含这一行,但等级为 第三。第三行确实也没有涉及anvils(按它们的产品名))
  4. 布尔文本搜索:select note_text from productnotes where match(note_text) against('heavy -rope*' in boolean mode); (这次只返回一行。这一次仍然匹配词heavy,但-rope明确地指示MySQL排除包含rope(任何以rope开始的词,包括ropes的行))

全文本布尔操作符:

布尔操作符说明
+包含,词必须存在
-排除,词必须不出现
>包含,而且增加等级值
<包含,且减少等级值
()把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
˜取消一个词的排序值
*词尾的通配符
“”定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值