gpt4 book ai didi

php mysql 搜索全文

转载 作者:行者123 更新时间:2023-11-29 14:38:52 24 4
gpt4 key购买 nike

表结构:

Companies: id, name, city, branch, keywords, country

关键字字段包含名称城市和分支,我现在只使用带有通配符的 LIKE,例如“%music london%”将返回“musicfactory london”

但它不够精确,例如,如果用户想要搜索伦敦的 Vini & Magraine(一家餐厅),并且输入为“vini londen”,则找不到,但是如果用户插入“magraine london”,则会找到被发现。

所以问题可能是关键字的顺序,现在我计划转换为全文搜索,我已经在关键字字段上创建了索引,关键字字段也是一个聪明的主意吗?

我的主要问题是,我使用以下查询创建了全文搜索:

SELECT id, name, branch FROM companies WHERE MATCH(keywords) AGAINST(? IN BOOLEAN MODE) AND country = ? LIMIT 7

但是它没有返回正确的结果?最好且最有效的解决方案是什么?

感谢您的阅读。

最佳答案

这是针对运算符的标准匹配的一个很好的分解。它应该阐明如何编写您的查询:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

如果我正确地阅读了您的问题,您会问公司表中的“关键字”列是否是一个好主意 - 我说这取决于您如何填充它,但当然,这还不错。我使用了一个集体关键字列,其中包含之前相关字段集合中的所有标准文本,效果很好。

其他一些注释 -

1)我认为您的 LIKE 示例存在缺陷,根据该规则,我对您得到的任何结果感到惊讶。 % 是一个有方向性的通配符。所以 '%music london%' 不应返回 'musicfactory london'。您需要将其写为 WHERE(keywords LIKE '%music%' AND keywords LIKE '%london%') 才能正常工作。

2) 全文搜索只能在 MyISAM 表上使用,因此如果您使用依赖于 innoDB 的框架,则需要创建一个关系解决方法。 (或者您使用 innoDB 的任何其他原因)

3) 根据默认 ini 设置,匹配的默认最小字符数为 4。您需要在配置中将其设置得较低,然后如果需要较低的最小字符范围,请重建全文索引。考虑一下“艺术”这样的词,您就会知道为什么建议降低该值。否则,您可能需要编写一个条件来在匹配模式和较短字符串的 LIKE 模式之间切换。

关于php mysql 搜索全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408974/

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