gpt4 book ai didi

full-text-search - MariaDB 上的 MATCH AGAINST SQL 查询未按预期工作

转载 作者:行者123 更新时间:2023-12-05 05:10:23 25 4
gpt4 key购买 nike

我正在做一个项目,我正在使用 MySQL MATCH AGAINST。我以前在另一个项目中使用过没有任何问题并使用相同的基本代码,除了我有一些奇怪的行为。唯一真正的区别是我使用的是 MariaDB 而不是 MySQL。

下面是我的表是如何定义的

CREATE TABLE `temp_logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`LogID` int(11) NOT NULL,
`LogReceived` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Host` int(11) NOT NULL,
`LogName` varchar(100) NOT NULL,
`LogLine` text NOT NULL,
PRIMARY KEY (`id`),
KEY `IDXLogID` (`LogID`,`LogReceived`,`Host`),
FULLTEXT KEY `IDXLogLine` (`LogLine`)
) ENGINE=MyISAM AUTO_INCREMENT=5838772 DEFAULT CHARSET=latin1;

我正在执行全文搜索的列之一包含以下内容:

19/06/2019 19:01:18:用 0 秒读取日志“Log Agent”的行

如果我这样查询(LogLine是全文搜索的列):

SELECT * FROM log_agent.temp_logs WHERE MATCH(LogLine) AGAINST ('+Log' IN BOOLEAN MODE);

但上面的查询没有返回任何结果,即使如上所示列值包含 Log。如果我尝试将 +Log 更改为 +seconds,它会返回该行,那么为什么它会找到 seconds 而不是 Log,如果我再次为 +Agent 更改 +Log 行,那么它们似乎没有任何韵律或原因。

我已经尝试删除 IN BOOLEAN MODE,因为我以前不需要它,但没有任何区别。

最佳答案

使用 MyISAM 的 FULLTEXT 有 3 个注意事项:

  • 出现在超过一半行中的词不会被编入索引。

  • 短于 ft_min_word_len 的词不会被编入索引。

  • “停用词”列表中的词未编入索引。

过滤 FULLTEXT 倾向于忽略的内容时,这个技巧很有用:

WHERE MATCH(`LogLine`) AGAINST ('...' IN BOOLEAN MODE)  -- things that FT can do
AND `LogLine` LIKE "..." -- (or NOT LIKE or RLIKE or NOT RLIKE, as needed)

这将相当有效,因为它会首先进行 FT 测试,这只会找到几行。然后它将在这些行上付出额外的努力。

关于full-text-search - MariaDB 上的 MATCH AGAINST SQL 查询未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com