Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在数据库中搜索文本字符串,可能是标记_Mysql_String_Search_Tags_Full Text Search - Fatal编程技术网

Mysql 在数据库中搜索文本字符串,可能是标记

Mysql 在数据库中搜索文本字符串,可能是标记,mysql,string,search,tags,full-text-search,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

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

……等等。这张桌子太大了

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

“男孩得到女孩”

我想知道的是,如何在数据库中搜索:

“男孩”、“得到”、“女孩”、“男孩得到”、“女孩得到”、“男孩女孩”、“男孩女孩得到”


这能自动完成吗?有这样的功能吗?

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

在数据库中搜索任意文本 其名称为“模式匹配”,在SQL中,它以多种方式实现:

三者中,最后一个可能是最强大的。您可以轻松地使用以下各项完成您想要的任务:

SELECT * FROM table_tags WHERE MATCH(tag_text) AGAINST('boy gets girl');
最好的部分是什么按相关性的顺序返回行

获取基于标签的电影
我将假设,因为您使用的是这个两表模型,所以您已经知道如何进行连接,但以防万一,这里是为您准备的。一旦你有了标签ID,你就可以很容易地得到电影ID和电影实体本身。

我实际上要用三个表,我相信它是被调用的TOXI方法。你认为哪个更好。另外,正如你所看到的,我也有流派,所以可能需要第四个表格。当我搜索“男孩得到女孩”时,这会返回一个结果“诺丁山”,但不会返回“独自回家”。当我搜索“男孩”时,它不会返回任何东西。。。应该吗?TOXI的优点是如果您想重命名标记。缺点是一次搜索多个标记会变得更加困难,因为这些标记现在被规范化到另一个表中。很难说哪一个更好,你最了解你的数据库,所以你必须做出最后的选择:对奇怪结果的PAs…它应该。您可以这样尝试:
SELECT*FROM table_tags,其中MATCH(tag_text)与(“+boy get girl”处于布尔模式)这可能会更好。这不会再产生除了“诺丁山”以外的任何东西了。我还在决定是三张桌子还是两张桌子。我认为3+会更好,因为我还可以使用类型和其他属性来搜索电影。你知道有什么好的教程吗?
SELECT * FROM table_tags WHERE MATCH(tag_text) AGAINST('boy gets girl');