如何解决如何在 MYSQL 中使用斜杠进行全文搜索
如果可能的话,寻求这方面的帮助。我有一个如下所示的 MysqL 表:
CREATE TABLE mydata_tbl
(`name` varchar(92));
INSERT INTO mydata_tbl
(`name`)
VALUES
('https://www.google102.com'),('1999 Pokemon BASE SET SHADOWLESS 84/102 PLUSPOWER UNCOMMON (SHADOWLESS)'),('2018 Pokemon SUN MOON DRAGON MAJESTY 114/102 RESHIRAM GX ULTRA RARE'),('2000 Pokemon GYM HEROES 1ST EDITION 110/102 ERIKAS PERFUME UNCOMMON 1ST EDITION'),('2017 Pokemon SUN MOON CRimsON INVASION 117/102 KARTANA GX HYPER RARE'),('2016 Pokemon SUN MOON PROMOS SM158/102 CHARIZARD (STAFF) PRE RELEASE PROMO'),('1999 Pokemon FOSSIL UNLIMITED 50/102 KABUTO COMMON UNLIMITED'),('Pokemon BATTLE ACADEMY Box SET 119/102 CYNTHIA pikaCHU DECK (pikaCHU SYMBOL 59)'),('1999 Pokemon BASE SET 1ST EDITION 4/102 CHARIZARD HOLO');
CREATE FULLTEXT INDEX idx_1 ON mydata_tbl (`name`);
我的问题是我希望有时能够通过卡号进行搜索。所以,如果我搜索 4/102,我至少应该在前几场比赛中得到那个结果。我的表中大约有 100,000 行,但我没有通过 FULLTEXT Search 获得我需要的结果。我可以通过使用 LIKE 获得我需要的结果,但这意味着您必须按照它们存储在表中的顺序使用搜索词......我并不总是知道。
这是我的简单 SELECT 语句:
SELECT name
FROM mydata_tbl
WHERE MATCH (name) AGAINST ('"4/102"' IN BOOLEAN MODE);
Limit 5;
我认为正在发生的是 / 被忽略了。有没有解决的办法?您认为可能是什么问题?
感谢任何帮助。
谢谢, 卡尔
解决方法
A 计划:
您的配置中的“最小字长”是多少?大概是“3”。这意味着不能搜索“4”,但可以搜索“102”。
以下是在大表中查找“4/102”的最快方法:
std::max_element
由于它也得到“114/102”而您不希望出现这种情况,因此需要付出更多努力:WHERE MATCH(col) AGAINST('+102' IN BOOLEAN MODE)
AND col LIKE '%4/102%'
有风险,因为它周围可能没有“空格”。这效果更好:LIKE ' 4/102 '
(在 MySQL 8.0 中),否则 RLIKE '[[:<:]]4/102[[:<:]]'
计划 B:
准备数据,使单词看起来像单词。这可能需要您添加第二列——一列用于显示用户,另一列用于 FULLTEXT。
在这种情况下,将“4/102”转换为“4_102”,然后执行
RLIKE '\\b4/102\\b'
这需要您的努力,但速度会非常快。
,全文搜索无法做到这一点 全文搜索是针对全词搜索,而不是根据需要进行部分词搜索。
使用
SELECT name
FROM mydata_tbl
WHERE name Like "%4/102%"
或正则表达式
,在限制 5 后使用分号(;);那么查询将起作用。但它不会为“4/102”返回完全匹配的行。请检查并让我知道这是您要查找的内容:
SELECT name
FROM mydata_tbl
WHERE MATCH (name) AGAINST ('"4/102"' IN BOOLEAN MODE)
Limit 5;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。