繁体   English   中英

PHP MySQL搜索全文

[英]php mysql search fulltext

表结构:

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

如果我正确地阅读了您的问题,则说明您在companies表中的“关键字”列是否是个好主意-我说这取决于您的填充方式,但是可以肯定,这还不错。 我以前使用的是一个集体关键字列,该列以前包含相关字段集合中的所有标准文本,并且效果很好。

其他几个注意事项-

1)我认为您的LIKE示例存在缺陷,根据该规则,我很惊讶您获得了任何结果。 %是定向的通配符。 因此,“%music london%”不应返回“ musicfactory london”。 您必须将其写为WHERE( keywords LIKE'%music%'和keywords LIKE'%london%')才能正常工作。

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

3)默认ini设置中,match对的默认最小字符数为4。 您需要在配置中设置较低的值,然后如果需要较低的最小字符范围,则重建全文索引。 考虑一下“艺术”之类的词,您会知道为什么建议降低此值。 否则,对于较短的字符串,您可能必须编写条件才能在对匹配和LIKE模式之间切换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM