我目前正在尝试将Sphinx搜索引擎集成到Python应用程序中。问题是SphinxQL不像普通的SQL那样支持OR子句。有一些黑客可以使用,比如在SELECT中编写表达式,如下所示:
SELECT id,(field1 = val1 OR field2 = val2) as expr FROM foo_bar WHERE expr = 1;但是,它不适用于字符串,因为它们应该使用MATCH函数来处理。因此,我决定将查询划分为单独的子查询,并合并所获得的结果。然而,获取适当的元信息仍然存在问题,特别是total_found字段。Sphinx将它计算为单独的查询,但是从这些查询中获得的行可能是相交的,我没有能力检查它(数据库很大)。
我相信一定会有解决办法的。我使用的是狮身人面像(SphinxAlchemy与我正在使用的SQLAlchemy有版本冲突)。
来自SphinxSearch论坛的Repost
我有一个表格,我需要搜索的文本和数字列以及。我需要编写带有OR条件的查询;找到一种使用SELECT表达式进行查询的方法,如:
SELECT *, quantity>=50 OR quantity=0 AS mycond FROM table1 WHERE mycond = 1;无可救药地,它不能处理字符串属性。未解析此查询:
SELECT *, category='foo' OR category='bar' AS mycond FROM table1 WHERE mycond = 1;然而,这在Beta 2.2.3中是可行的:
SELECT * FROM table1 WHERE category='foo';我应该怎么做才能找到符合某一条件的行数,而不是每一行?我可以进行几次查询,并将获得的项合并到一个列表中,但现在需要将这些行中的多少列放在数据库中。
发布于 2014-08-27 21:08:40
对于属性/ facet或in,我认为您是正确的,唯一的方法是在SELECT子句中添加表达式。
但是,对于字符串,请查看关于全文查询语法的文档。您不能确切地使用OR关键字,但是这样的操作应该可以:
SELECT id, name
FROM recipes
WHERE MATCH('(@ingredients chocolate) | (@name cake)')
LIMIT 10;https://stackoverflow.com/questions/23885643
复制相似问题