Mysql搜索每个单词
假设我有一个列“x”和一个记录:“一二你好五”。 我想搜索一个特定的单词(例如“hello”),如果它存在,则给出这个记录作为结果Mysql搜索每个单词,mysql,sql,string,Mysql,Sql,String,假设我有一个列“x”和一个记录:“一二你好五”。 我想搜索一个特定的单词(例如“hello”),如果它存在,则给出这个记录作为结果 我尝试过“选择(…)其中x类似于“hello”-没有匹配项 我不想使用“SELECT(…)WHERE x,比如“%hello%”,因为它会给我一些记录,其中“hello”可以包含在另一个单词中(f.e.“rhellog”-我不想这样做) 我不想要正则表达式'RLIKE'[[::]]-因为它太慢了 是否有其他选项可以搜索给定列中的确切单词,但速度不如正则表达式慢?您是
SELECT (...) WHERE x LIKE '% hello %
在hello
的两边都有空格 您是否尝试过:
SELECT (...) WHERE x LIKE '% hello %
在hello
的两边都有空格 尝试使用
SELECT (...) WHERE x LIKE '% hello %' or x LIKE 'hello %' or x LIKE '% hello'
尝试使用
SELECT (...) WHERE x LIKE '% hello %' or x LIKE 'hello %' or x LIKE '% hello'
如果您想提高速度,请使用全文搜索索引。如果列包含类似于用空格分隔的标记的内容,那么您的数据结构错误,需要另一个表 如果使用一致的单词分隔符,您可以像使用一样执行所需的操作:
where concat(' ', x, ' ') like '% hello %'
但这不会比regex版本快多少。regex版本更为通用,因为它允许更多的分词符。如果您想提高速度,请使用全文搜索索引。如果列包含类似于用空格分隔的标记的内容,那么您的数据结构错误,需要另一个表 如果使用一致的单词分隔符,您可以像使用一样执行所需的操作:
where concat(' ', x, ' ') like '% hello %'
但这不会比regex版本快多少。regex版本更通用,因为它允许更多的单词分隔符。通常,对于这样的用例,您应该考虑MySQL是否是该任务的最佳数据库。您可以搜索
%hello%
,或者按照其他人的建议,您可以使用regex。但你必须意识到,与其他允许你搜索文本的数据库相比,这些数据库的速度都会很慢
下一个选项是使用match(column)对抗('hello')
,如果您有最新版本,则可以利用
您最好的选择是真正评估您的用例。如果这是针对少量数据,那么上述任何一项都可能有效。但是,如果您有数百万个文档和数百万个事务,那么您最好的选择是使用类似于使用Lucene索引单词的东西 通常,对于这样的用例,您应该考虑MySQL是否是最适合这项工作的数据库。您可以搜索
%hello%
,或者按照其他人的建议,您可以使用regex。但你必须意识到,与其他允许你搜索文本的数据库相比,这些数据库的速度都会很慢
下一个选项是使用match(column)对抗('hello')
,如果您有最新版本,则可以利用
您最好的选择是真正评估您的用例。如果这是针对少量数据,那么上述任何一项都可能有效。但是,如果您有数百万个文档和数百万个事务,那么您最好的选择是使用类似于使用Lucene索引单词的东西 你说得对,使用
REGEXP
速度很慢,像使用通配符一样使用
通过全文索引可以很好地解决您的需求。这是MySQL中内置的一项功能:,或者您也可以使用ApacheSolr或Sphinx Search等工具独立索引数据
您可能会发现我在比较MySQL的不同全文搜索解决方案时所做的介绍很有用
- 幻灯片:
- 网络研讨会视频:
你说得对,使用REGEXP
速度很慢,像使用通配符一样使用
通过全文索引可以很好地解决您的需求。这是MySQL中内置的一项功能:,或者您也可以使用ApacheSolr或Sphinx Search等工具独立索引数据
您可能会发现我在比较MySQL的不同全文搜索解决方案时所做的介绍很有用
- 幻灯片:
- 网络研讨会视频:
其中x类似于“%hello%”
具有类似于“[[::]”的x的
说明:
像
这样的速度更快,但会得到一些您不想要的行
类RLIKE
仅应用于通过类过滤的类,因此其缓慢性不是太大的问题
(是的,全文
会快得多。)其中x像“%hello%”
具有类似于“[[::]”的x的
说明:
像
这样的速度更快,但会得到一些您不想要的行
类RLIKE
仅应用于通过类过滤的类,因此其缓慢性不是太大的问题
(是的,全文
会快得多。)使用regex
是你最好的选择。如果你想要速度,请使用全文搜索功能。@gordon-你是什么意思?请参阅我在MySQL 5.7中关于全文搜索的答案使用regex
是你最好的选择。如果你想要速度,请使用全文搜索功能。@gordon-你是什么意思?请参阅我关于全文的答案在MySQL 5.7中搜索这是一个很酷的想法!但若单词是句子中的第一个或最后一个单词(并没有空格),那个么就使用or,例如…'其中x像“%hello%”或x像“%hello%”或x像“%hello%”这是个好主意!但若单词是句子中的第一个或最后一个单词(并没有空格),那个么就使用or,例如…'其中x类似于“%hello%”,或者x类似于“%hello%”,或者x类似于“%hello%”