我目前正在尝试将 Sphinx 搜索引擎集成到 Python 应用程序中。问题是 SphinxQL 不像普通 SQL 那样支持 OR 子句。有一些技巧可以使用,比如像这样在 SELECT 中编写表达式:
SELECT id,(field1 = val1 OR field2 = val2) as expr FROM foo_bar WHERE expr = 1;
但是,它不适用于字符串,因为它们应该使用 MATCH 函数来处理。所以我决定将查询分成单独的子查询并组合获得的结果。然而,获取正确的 META 信息仍然存在问题,尤其是total_found
字段。Sphinx 将其计算为单独的查询,但从这些查询中获得的行可能会相交,我无法检查它(数据库很大)。
我相信必须有一个解决方案。我正在使用 Sphinxit(SphinxAlchemy 与我正在使用的 SQLAlchemy 存在版本冲突)。
我有一个表格,我还需要在其中搜索文本和数字列。我需要用 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';
我应该怎么做才能找到符合条件之一的行数,而不是每个条件?我可以进行一些查询并将获得的项目合并到一个列表中,但我现在需要知道这些行中有多少在数据库中。