【问题标题】:Full Text Search MySQL全文搜索 MySQL
【发布时间】:2015-07-03 22:20:10
【问题描述】:

我知道如何使用“全文搜索 MySQL”。我想知道的是如何在文本中搜索单词。例如:- 我们在 mysql 中有三个记录如下

1.) 这是程序员的地方。
2.) 人们为了旅行目的而去的地方。
3.) 程序员出于编码目的访问此站点。

现在当用户搜索“程序员的地方”时

以下应该是输出

它应该以任意顺序输出包含句子中所有单词的行

1.)这是一个程序员的地方
2.)程序员访问这个地方网站编码目的。

感谢您的帮助。

【问题讨论】:

  • 您可以尝试只查找第一个单词,然后在结果中查找第二个单词,依此类推。
  • 在布尔模式下尝试全文搜索
  • 能否请您以 SQL 查询的形式给出答案,这会很有帮助
  • 实际上全文搜索可能会忽略“for”这个词,所以这不会真正起作用。
  • 我刚刚用 twitter 做了实验,它产生了预期的结果......他们是怎么做到的?

标签: php mysql full-text-search


【解决方案1】:

MySQL 有 MATCH..AGAINST 用于全文搜索。试试下面的,

SELECT * FROM <table> WHERE MATCH(<column>) AGAINST('+place +for +programmers' IN BOOLEAN MODE)

+ 的基本意思是 AND(您可以使用 - 表示 OR)

https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

【讨论】:

  • 而且你还必须在列中添加全文索引
  • 我刚刚在 mysql phpmyadmin 中尝试过,我创建了一个随机表并用上面相同的行填充它,并尝试了查询,但它返回的是空的结果集
  • 随机表的架构是什么?
  • 由于+for 的存在而无法工作。如果您想查找三个字母的单词,请阅读this。此外,布尔搜索默认为or+ 在单词前面表示and。单词前面的- 表示not,而不是答案中所述的or
  • 非常感谢,我刚刚修复了它,现在它可以完美运行了。非常感谢!!!!
【解决方案2】:
  1. 在使用全文搜索之前,索引列

    ALTER TABLE <table> ADD FULLTEXT(column);
    
  2. 验证它是否已经在全文中

    SELECT 
        index_name, group_concat(column_name) as columns
    FROM 
        information_Schema.STATISTICS 
    WHERE 
        table_schema = 'your_db_name' 
        AND table_name = 'table_name'
        AND index_type = 'FULLTEXT'
    GROUP BY 
        index_name;
    
  3. 然后使用下面的 SQL

    SELECT * 
    FROM <table>
    WHERE MATCH(<column>) AGAINST('+place +for +programmers' IN BOOLEAN MODE)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2016-08-24
    • 2021-01-28
    • 2012-01-16
    相关资源
    最近更新 更多