【问题标题】:FullText search query in MySQLMySQL中的全文搜索查询
【发布时间】:2011-11-30 11:04:58
【问题描述】:

我有以下表结构:

id           bigint(20)
loc          text   
lastmod      datetime
changefreq   varchar(15)
priority     float
isdownloaded tinyint(1)
mainrepoid   bigint(20)

在具有链接的 loc 上启用了全文,我想提取所有具有“名称”和“详细信息”字词但不应包含“字符”字词的链接。我正在使用以下查询:

SELECT *
FROM links
WHERE MATCH (
   loc
)
AGAINST (
   'name+details-character'
)

但返回的结果中也有“字符”字样。简而言之,我实际上想要来自 loc 字段的具有这种结构 example.com/name/id/details 的所有 url。

【问题讨论】:

  • 在这些单词之间放置空格,例如:'name +details -character'

标签: mysql search full-text-search


【解决方案1】:

就像 Jauzsika 在评论中所说,你应该在它之间放置空格。

如果“姓名”必须出现,您还应该在其前面添加一个加号。

此外;这些运算符仅在布尔模式下工作。您应该在 AGAINST 语句中添加 IN BOOLEAN MODE,如下所示:

SELECT *
FROM links
WHERE MATCH (
   loc
)
AGAINST (
   '+name +details -character' IN BOOLEAN MODE
)

【讨论】:

  • 我实际上想要来自 loc 字段的所有具有这种结构 example.com/name/id/details 的 url。
  • 虽然上面的方法可以正常工作,但在这种情况下,我宁愿选择一个类似:WHERE loc LIKE '%example.com/name/id/details%'
【解决方案2】:

您还应该检查系统变量ft_max_word_len 和ft_min_word_len,因为全文搜索可能会根据单词的长度跳过一些记录。

sys vars

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多