gpt4 book ai didi

MySQL 全文搜索返回 0 个结果

转载 作者:行者123 更新时间:2023-11-30 01:28:05 25 4
gpt4 key购买 nike

我刚刚在 MySQL 数据库上设置了全文索引,但不幸的是它没有返回任何结果。

这似乎是一个常见问题,典型的答案是使用 MyISAM 引擎和“IN BOOLEAN MODE”函数。好吧,这些似乎都不适合我。

这是我的示例代码:

DROP TABLE IF EXISTS parentregionlist;
CREATE TABLE parentregionlist
(
RegionID INT NOT NULL,
RegionType VARCHAR(50),
RelativeSignificance VARCHAR(3),
SubClass VARCHAR(50),
RegionName VARCHAR(255),
RegionNameLong VARCHAR(510),
ParentRegionID INT,
ParentRegionType VARCHAR(50),
ParentRegionName VARCHAR(255),
ParentRegionNameLong VARCHAR(510),
CountryCode VARCHAR(2),
TimeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (RegionID),
FULLTEXT (RegionNameLong)
) ENGINE = MyISAM;

INSERT INTO parentregionlist
VALUES (575,
"City",
"",
"",
"Birmingham",
"Birmingham, England, United kingdom",
6023342,
"Multi-City (Vicinity)",
"Birmingham (and Vicinity)",
"Birmingham (and vicinity), England, United Kingdom",
"",
now());

SELECT *
FROM parentregionlist
WHERE MATCH(regionnamelong)
AGAINST ('Birm' IN BOOLEAN MODE);

有什么想法吗?

附注在真实的表中我有 200k+ 行。我知道搜索不能仅适用于一行,这只是一个示例。

最佳答案

通过当前查询,您正在寻找完整的单词匹配。因此,例如要获取上面插入的行,您需要执行以下操作:

SELECT * 
FROM parentregionlist
WHERE MATCH(regionnamelong)
AGAINST ('Birmingham (and vicinity), England, United Kingdom' IN BOOLEAN MODE);

但是,如果您想搜索以“Birm”开头的所有结果,则需要添加“*”修饰符:

SELECT * 
FROM parentregionlist
WHERE MATCH(regionnamelong)
AGAINST ('Birm*' IN BOOLEAN MODE);

或者您也可以使用 LIKE:

SELECT * 
FROM parentregionlist
WHERE regionnamelong LIKE 'Birm%';

MySQL 文档提供了很好的 MATCH 示例: http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

关于MySQL 全文搜索返回 0 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763787/

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