mysql - 在数据库中搜索文本字符串,可能是标签

标签 mysql string search tags full-text-search

这在某种程度上是一个悬而未决的问题,但是我提出这个问题的主要原因是要么知道此类任务的“名称”,要么被指出我应该寻找的正确方向。

我想要实现的是一个可以标记的项目数据库。文本字符串的格式。

例如,如果我们正在谈论电影。

table_movies
  movie_id
  movie_title
  movie_genre

table_tags
  tag_id
  movie_id
  tag_text

电影只会进入其各自的表一次。在 table_tags 表中,movie_id 可以无限次列出,每个标签列出一次。

table_movies
  movie_id    movie_title      movie_genre
  1           Notting Hill     Romantic Comedy
  2           Jurassic Park    Science Fiction, Action Adventure
  3           Grease           Musical
  4           Salt             Action Adventure
  5           Gladiator        Drama, Epic, Historical, Adventure, Action
  6           E.T.             Science Fiction, Action Adventure, Fantasy

table_tags
  tag_id      movie_id      tag_text
  1           1             Notting
  2           1             Hill
  3           1             London
  4           1             Market
  5           2             Jurassic
  6           2             Park
  7           2             90s
  8           2             T-Rex
  9           2             Amber
  10          2             Egg
  11          3             Grease
  12          3             Cars
  13          3             Diner
  14          4             Salt
  15          4             Undercover
  16          4             Twist
  17          4             Agent
  18          5             Gladiator
  19          5             Shield
  20          5             Roman
  21          1             Boy gets girl
  22          3             Varsity
  23          3             Rock & Roll
  24          5             Honour
  25          5             Arena
  26          6             E.T.
  27          6             boy
  28          6             alien
  29          6             phone home
  30          7             Home
  31          7             Alone
  32          7             robbers
  33          7             boy

...等等。这个表会很大。

当用户访问该网站时,他们可以搜索一个单词或一串文本。例如:

男孩得到女孩

我想知道如何做,或者它被称为什么,是在数据库中搜索:

男孩”,“得到”,“女孩”,“男孩得到”,“< em>得到女孩”,“男孩女孩”,“男孩得到女孩”。

这可以自动完成吗?有这个功能吗?

最佳答案

您的问题实际上分为两部分:

在数据库中搜索任意文本

这个的名称是“模式匹配”,在 SQL 中它有多种实现方式:

在这三个中,最后一个可能是最强大的。您可以轻松地做您想做的事:

SELECT * FROM table_tags WHERE MATCH(tag_text) AGAINST('boy gets girl');

最好的部分? 行按相关性顺序返回

根据标签获取电影

我假设因为您使用的是这个双表模型,所以您已经知道如何进行连接,但以防万一,这里是 a resource为你。获得标签 ID 后,您可以轻松获取电影 ID 以及电影实体本身。

关于mysql - 在数据库中搜索文本字符串,可能是标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19187851/

相关文章:

Ruby:将用户输入与字符串进行比较

python - 在 Python 3 中编码字符串而不使用 unicode\xc2 替换

c# - MVC LINQ - 在相关表中使用 Contains 搜索/查询文本

algorithm - 波束搜索算法中的波束大小代表什么?

mysql - 1005 mysql 无法创建表外键 erno 150

php - 如何在从mysql下载的文件的每行末尾添加文本?

mysql - 复制大量行,防止用户在此过程中创建或更新新记录

mysql - Adminer 4.3.1 - 仅显示一个数据库

java - 获取带有数学表达式的字符串,将其解析为函数数学表达式以便稍后对其求值(Java)

search - Monotouch.Dialog:EnableSearch和自定义RootElement崩溃