MySql与Sql Server全文搜索的等价物是什么?
我以前使用过Sql Server,并使用了它的一个非常好的功能,称为Sql全文搜索。现在我必须使用MySql。谁能告诉我MySql中的全文搜索是什么?我使用的是MySql的免费版,而不是商业版。如果没有,那么我们还能做些什么来模拟全文搜索并克服LIKE操作符的限制呢MySql与Sql Server全文搜索的等价物是什么?,mysql,Mysql,我以前使用过Sql Server,并使用了它的一个非常好的功能,称为Sql全文搜索。现在我必须使用MySql。谁能告诉我MySql中的全文搜索是什么?我使用的是MySql的免费版,而不是商业版。如果没有,那么我们还能做些什么来模拟全文搜索并克服LIKE操作符的限制呢 提前感谢:)请参阅mysql中支持全文搜索的文档: 您将希望对列应用全文索引,以便支持对这些列的全文搜索。请注意,mysql只支持MyISAM表上的全文索引 作为一个例子,如果上面的链接在某个时候失效,请参阅文档中的完整示例: m
提前感谢:)请参阅mysql中支持全文搜索的文档: 您将希望对列应用全文索引,以便支持对这些列的全文搜索。请注意,mysql只支持MyISAM表上的全文索引 作为一个例子,如果上面的链接在某个时候失效,请参阅文档中的完整示例:
mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO articles (title,body) VALUES
-> ('MySQL Tutorial','DBMS stands for DataBase ...'),
-> ('How To Use MySQL Well','After you went through a ...'),
-> ('Optimizing MySQL','In this tutorial we will show ...'),
-> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
-> ('MySQL vs. YourSQL','In the following database comparison ...'),
-> ('MySQL Security','When configured properly, MySQL ...');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body)
-> AGAINST ('database' IN NATURAL LANGUAGE MODE);
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
请参阅mysql中支持全文搜索的文档: 您将希望对列应用全文索引,以便支持对这些列的全文搜索。请注意,mysql只支持MyISAM表上的全文索引 作为一个例子,如果上面的链接在某个时候失效,请参阅文档中的完整示例:
mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO articles (title,body) VALUES
-> ('MySQL Tutorial','DBMS stands for DataBase ...'),
-> ('How To Use MySQL Well','After you went through a ...'),
-> ('Optimizing MySQL','In this tutorial we will show ...'),
-> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
-> ('MySQL vs. YourSQL','In the following database comparison ...'),
-> ('MySQL Security','When configured properly, MySQL ...');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body)
-> AGAINST ('database' IN NATURAL LANGUAGE MODE);
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
Ref在
MyISAM
表中,MySQL
支持全文
索引:
CREATE TABLE mytable (id INT, caption TEXT, content TEXT, FULLTEXT KEY fx_mytable_caption_content (caption, content)) ENGINE=MyISAM;
SELECT *
FROM mytable
WHERE MATCH(caption, content) AGAINST ('my search query')
在
MyISAM
表上,MySQL
支持FULLTEXT
索引:
CREATE TABLE mytable (id INT, caption TEXT, content TEXT, FULLTEXT KEY fx_mytable_caption_content (caption, content)) ENGINE=MyISAM;
SELECT *
FROM mytable
WHERE MATCH(caption, content) AGAINST ('my search query')
可以在一列或多列上创建全文索引。然后可以使用全文搜索查询来查询表。见和 典型的查询如下所示:
SELECT * FROM books
WHERE MATCH (title, summary) AGAINST ('harry potter')
ORDER BY MATCH (title, summary) AGAINST ('harry potter')
LIMIT 0, 10
可以在一列或多列上创建全文索引。然后可以使用全文搜索查询来查询表。见和 典型的查询如下所示:
SELECT * FROM books
WHERE MATCH (title, summary) AGAINST ('harry potter')
ORDER BY MATCH (title, summary) AGAINST ('harry potter')
LIMIT 0, 10
也许最好将匹配结果指定给一个名称,然后按该名称排序?例如,根据关联顺序,在何处匹配(标题、摘要)与《哈利波特》?MySql可能会对其进行优化,但仍然…最好将匹配结果分配给一个名称,然后按该名称排序?例如,根据关联顺序,在何处匹配(标题、摘要)与《哈利波特》?MySql可能会对其进行优化,但仍然…嗨,Kazar,你的答案是ver信息。但是我的所有表都是InnoDB,因为我使用的是引用完整性约束。保留MyISAM引擎有什么用途?大多数现实世界的应用程序数据库不是都有InnoDB引擎吗?为何会有这样的限制?现在,我应该从所有表中删除所有引用完整性约束以使其与全文搜索一起工作吗?@Nitesh:
InnoDB
是一个基于锁的并发事务引擎。对这样一个引擎的索引支持将是一项相当艰巨的任务,因为它需要集成到事务管理中,并且InnoDB
没有对非btree索引的内部支持。好的,我在stackoverflow本身上看到了一个链接:-它要求创建一个临时表并删除它们,而在每次搜索操作中创建和删除这些表将非常昂贵。相反,我将复制我希望进行全文搜索的几个表。顺便说一下,我在SQLServer2005中从未选择过任何引擎类型,它仍然支持引用完整性,甚至支持Sql全文搜索。事实上,从SQLServer2000开始,全文搜索就得到了支持,在2005年变得更好。Hi Kazar,您的答案是ver信息。但是我的所有表都是InnoDB,因为我使用的是引用完整性约束。保留MyISAM引擎有什么用途?大多数现实世界的应用程序数据库不是都有InnoDB引擎吗?为何会有这样的限制?现在,我应该从所有表中删除所有引用完整性约束以使其与全文搜索一起工作吗?@Nitesh:InnoDB
是一个基于锁的并发事务引擎。对这样一个引擎的索引支持将是一项相当艰巨的任务,因为它需要集成到事务管理中,并且InnoDB
没有对非btree索引的内部支持。好的,我在stackoverflow本身上看到了一个链接:-它要求创建一个临时表并删除它们,而在每次搜索操作中创建和删除这些表将非常昂贵。相反,我将复制我希望进行全文搜索的几个表。顺便说一下,我在SQLServer2005中从未选择过任何引擎类型,它仍然支持引用完整性,甚至支持Sql全文搜索。事实上,从SQLServer2000开始,全文搜索就得到了支持,并且在2005年变得更好