我有以下表结构:
id bigint(20)
loc text
lastmod datetime
changefreq varchar(15)
priority float
isdownloaded tinyint(1)
mainrepoid bigint(20)
在具有链接的loc上启用了FullText,我想提取具有“name”和“details”字样的所有链接,但不应包含“character”字。我使用以下查询:
SELECT *
FROM links
WHERE MATCH (
loc
)
AGAINST (
'name+details-character'
)
但是返回的结果中也有“字符”字样。简而言之,我实际上希望所有来自loc字段的具有此结构的URL / 名称 / id / 详细信息。
答案 0 :(得分:1)
就像Jauzsika在评论中所说,你应该在它之间加上空格。
如果“name”必须,您还应该在其前面添加一个加号。
此外;这些运算符仅在布尔模式下工作。您应该将IN BOOLEAN MODE添加到您的AGAINST语句中,如下所示:
SELECT *
FROM links
WHERE MATCH (
loc
)
AGAINST (
'+name +details -character' IN BOOLEAN MODE
)
答案 1 :(得分:0)
此外,您应该检查系统变量ft_max_word_len
和ft_min_word_len
,因为全文搜索可能会跳过某些记录,具体取决于单词的长度。