mysql全文匹配搜索字串中含圆括号()怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql全文匹配搜索字串中含圆括号()怎么办?相关的知识,希望对你有一定的参考价值。

mysql fulltext全文检索,但关键字中含有括号,如检索语句为
select * from table WHERE MATCH(tags) AGAINST('+老人(大于70)' IN BOOLEN MODE);
tags内容如下 :‘老人(大于70) 小孩’
由于全文检索布尔模式(代表分组,所以检索出现问题,请问这个该如何修改?
冰蓝月零冻 的方案试过了,不过好像不行!

参考技术A [(]
[)]
特殊符号用中括号括起来就是原意,同理还有[-]等本回答被提问者采纳
参考技术B 用mysql取出数据,再用正则表达式匹配出来不可以吗 参考技术C 用mysql取出数据,再用正则表达式匹配出来不可以吗 参考技术D 老哥,这个问题 你解决了吗 可以分享一下 怎么解决的吗 第5个回答  2012-04-04 那你最好重开个问题。分值都给了。

自然语言模式下的全文匹配搜索

【中文标题】自然语言模式下的全文匹配搜索【英文标题】:Fulltext match search in natural language mode 【发布时间】:2020-08-13 02:51:53 【问题描述】:

我正在尝试在 mysql 中进行全文搜索。我希望当我传入一个字符串时,当我使用 [自然语言模式]mysql - fulltext index - what is natural language mode 时,我会收到按相关性排名。

这是我创建索引的方式:CREATE FULLTEXT INDEX item_name ON list_items(name);

当我使用 LIKE 时,我会收到结果,但我想按相关性对它们进行排序。因此,全文搜索。

这是我使用 LIKE 的查询:SELECT name FROM list_items WHERE name LIKE "%carro%"; 这导致Carrots, Carrots, Carrots 等。

这是我尝试 MATCH 搜索的查询:SELECT name FROM list_items WHERE MATCH(name) AGAINST('carro' IN NATURAL LANGUAGE MODE); 没有返回任何结果。

我的查询基于此帖子的选定答案:Order SQL by strongest LIKE? 还有这个页面:https://www.w3resource.com/mysql/mysql-full-text-search-functions.php

即使我在没有自然语言模式或布尔模式的情况下运行查询,我也没有得到任何结果。我错过了什么?

【问题讨论】:

全文搜索默认搜索完整的单词。要查找以文本开头的单词,请使用通配符 ('carro*')。这无法在单词中间找到文本(就像您可以使用 like '%carro%' 一样)。还要注意相关性意味着什么,并且您几乎无法控制 MySQL 认为相关的内容。它是根据一个单词的稀有程度来计算的。如果您的列包含 3 次“Carrot”和 1 次“Carrotcake”,那么即使您认为“carrot”看起来更类似于“carro*”,carrotcake 比 carrot 更相关。对其进行测试,但请检查全文索引是否适合您的要求。 那么在这里使用LIKE 会更好吗? 由于您没有指定您的要求(例如,如果您想在单词中间搜索,或者您认为相关的内容),我无法告诉您 like 是否是更好的选择.我只是想评论一下,您应该测试和检查(或详细说明)您的要求,如果它们符合全文搜索可以(和不能)做的事情(如果不能,我们可能会指导您寻找替代解决方案)。跨度> 【参考方案1】:

您似乎想使用* 作为通配符。为此,您需要使用“布尔”模式而不是“自然语言”。所以,这可能会做你想做的事:

SELECT name
FROM list_items
WHERE MATCH(name) AGAINST('carro*' IN BOOLEAN MODE)

这仍然会产生相关性排名,尽管它可能与自然语言模式不完全相同。

另请注意,这将获得诸如“carrouse”之类的匹配项。

我认为 MySQL 不支持全文搜索的同义词列表,因此很难避免(尽管 like 过滤和全文过滤可能就足够了)。

【讨论】:

当我按原样运行您的答案时,我收到此错误:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LANGUAGE MODE)' at line 1

以上是关于mysql全文匹配搜索字串中含圆括号()怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

在ORACLE中获得某个字元在一个字串中位置是哪个函式

MySql学习之全文检索

字符串搜索算法

mysql 文本搜索

全文本搜索

全文本搜索