我正在运行一个简单的mysql全文查询,该查询根据其“显示名称”在我的网站上搜索用户.查询示例如下-在此示例中,我们正在搜索“兰开斯特玩具店”:

SELECT MATCH(`display_name`) AGAINST ('lancaster toy store') as `rel`
WHERE MATCH(`display_name`) AGAINST ('lancaster toy store')
ORDER BY `rel` DESC

它的效果很好,因为它可以得出很多结果,但是结果的一个示例是:

夏洛特玩具店
百老汇玩具店
亚利桑那州的玩具店
兰开斯特的玩具店
东海岸玩具

如您所见,我的问题是人们正在寻找“兰开斯特玩具店”,显然最好的结果是出现在中间或底部附近.

我也使用了porter-stemmer技术.


任何想法如何获得更准确的结果?

更新

这是真实的查询(实际搜索条件是“ lancaster restore”):

SELECT `id`,
       MATCH (`display_name`) AGAINST ('lancast* restor*' IN BOOLEAN MODE)
           AS `RELEVANCY`
FROM `users`
WHERE `status` = 'active'
&& MATCH (`display_name`) AGAINST ('lancast* restor*' IN BOOLEAN MODE)
ORDER BY `RELEVANCY` DESC
LIMIT 25

结果如下:

橙县人居环境-重新存储
重新存储新罕布什尔州第四街15号
莫里斯人居中心
人居中心利马俄亥俄州
人居夏洛特恢复
恢复蒙哥马利县
代顿俄亥俄州人性化栖息地
恢复
兰开斯特地区人性化栖息地

解决方法:

嗯,词干对获取结果可能很有用,但是由于并非所有参数都是必需的(前面没有),因此最好搜索:

MATCH (display_name) 
AGAINST ('lancast* restor* >lancaster >restore' IN BOOLEAN MODE)

或至少

ORDER BY MATCH (display_name) 
AGAINST ('lancast* restor* >lancaster >restore' IN BOOLEAN MODE) DESC

标签: mysql, search, full-text-search

相关文章推荐

添加新评论,含*的栏目为必填