Mysql 到 Sphinx 查询转换
Mysql to Sphinx query conversion
如何在 sphinx select * from vehicle_details where make LIKE "%john%" OR id IN (1,2,3,4)
上编写此查询,谁能帮帮我?我搜索了很多,但找不到答案。请帮忙
实际上很难做到,因为您将字符串搜索(LIKE
将是 MATCH
)与属性过滤器混合在一起。
会建议两个单独的查询,一个针对文本过滤器的 sphinx。而 IN 过滤器直接在数据库中执行 (mysql?)。合并应用程序中的结果。
好吧,如果你真的想使用 sphinx,也许可以将 id 做成一个假关键字,这样就可以在 MATCH 中使用它,例如
sql_query = SELECT id, CONCAT('id',id) as _id, make, description FROM ...
现在您有一个可以匹配的基于 id
的关键字。
SELECT * FROM index WHERE MATCH('(@make *john*) | (@_id id1|id2|id3|id4)')
但是请仔细阅读 sphinx 关键字匹配,因为默认情况下 sphinx 仅匹配整个单词,您需要启用部分单词与通配符匹配(例如使用 min_infix_len),这样您可以获得 关闭 到简单的 LIKE %..% 匹配(不考虑单词)
如何在 sphinx select * from vehicle_details where make LIKE "%john%" OR id IN (1,2,3,4)
上编写此查询,谁能帮帮我?我搜索了很多,但找不到答案。请帮忙
实际上很难做到,因为您将字符串搜索(LIKE
将是 MATCH
)与属性过滤器混合在一起。
会建议两个单独的查询,一个针对文本过滤器的 sphinx。而 IN 过滤器直接在数据库中执行 (mysql?)。合并应用程序中的结果。
好吧,如果你真的想使用 sphinx,也许可以将 id 做成一个假关键字,这样就可以在 MATCH 中使用它,例如
sql_query = SELECT id, CONCAT('id',id) as _id, make, description FROM ...
现在您有一个可以匹配的基于 id
的关键字。
SELECT * FROM index WHERE MATCH('(@make *john*) | (@_id id1|id2|id3|id4)')
但是请仔细阅读 sphinx 关键字匹配,因为默认情况下 sphinx 仅匹配整个单词,您需要启用部分单词与通配符匹配(例如使用 min_infix_len),这样您可以获得 关闭 到简单的 LIKE %..% 匹配(不考虑单词)