【发布时间】:2018-07-14 19:11:11
【问题描述】:
我试图匹配关键字但不完全匹配,相关的东西,我使用带有 wilcard %% 的 sql LIKE 类似'%mens, shoe%',将匹配每个数据与男人、男鞋甚至两者,但问题是,如果用户使用像 '%men\'s, shoe%' 这样的撇号,这将只匹配有男鞋或有撇号的男鞋的记录,不会匹配男鞋或男鞋有没有办法我可以用撇号输入匹配记录而没有撇号谢谢任何帮助
我正在编辑我的问题并添加 SQL 语句的样子
SELECT SQL_CALC_FOUND_ROWS p.product_id,p.title,p.price,p.unit_sold,p.slug,p.discount,p.free_shipping,free_return,
p.profile_img,p.store_name,p.item_number,
(
(-- Title score
if (title LIKE '%men\'s, shoe%',6,0) + if (title LIKE '%men\'s%',5,0) + if (title LIKE '%shoe%',5,0)
)+
(-- description
if (description LIKE '%men\'s, shoe%',5,0) + if (description LIKE '%men\'s%',4,0) + if (description LIKE '%shoe%',4,0)
)+
(-- item number
if (item_number = 'men\'s, shoe',4,0) + if (item_number = 'men\'s',3,0) + if (item_number = 'shoe',3,0)
)+
(-- category id
if (category_id = 'men\'s, shoe',4,0) + if (category_id = 'men\'s',3,0) + if (category_id = 'shoe',3,0)
)
) as relevance
FROM products p
WHERE p.is_active = '1'
HAVING relevance > 0
ORDER BY relevance DESC LIMIT 2,2
【问题讨论】:
-
为了更好的文本搜索,您需要使用全文索引并使用
MATCH .. AGAINST,但我仍然不相信 MySQL 适合复杂的文本搜索。我的建议是 Solr 或 Elasticsearch。 -
@Zamrony P. Juhara,感谢在线阅读了一些文档后,我想尝试一下 Elsaticsearch,但老实说,我无法完全理解它是如何工作的,我将数据保存在可以比较的索引中到数据库,如果我决定使用 ES,我的数据库中已经有一些数据,这是否意味着我无法在 ES 的帮助下在 mysql 数据库中搜索这些数据,如果可能的话,你能与我分享一个好的文档来阅读从了解如何实现这一点,谢谢
-
您可以使用 Elasticsearch 作为搜索引擎,定期从 Mysql 导入数据以使用 logstash 同步数据。 qbox.io/blog/…
-
虽然最好(好?)的结果只能通过复杂的文本索引或专门的引擎来实现,但改进可能来自 1.)在聚合上应用比较的所有数据列连接,2.)使用 @ 987654322@, 3.) 对测试数据进行规范化(不是 db 理论意义)(例如,全部小写、删除标点符号、删除语法标记)。