0

我目前正在尝试将 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 存在版本冲突)。

SphinxSearch 论坛转发

我有一个表格,我还需要在其中搜索文本和数字列。我需要用 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';

我应该怎么做才能找到符合条件之一的行数,而不是每个条件?我可以进行一些查询并将获得的项目合并到一个列表中,但我现在需要知道这些行中有多少在数据库中。

4

1 回答 1

2

对于属性/方面 OR'ing,我认为您是正确的,唯一的方法是将表达式放在 SELECT 子句中。

但是,对于字符串,请查看有关全文查询语法的文档。您不能完全使用 OR 关键字,但这样的事情应该可以工作:

SELECT id, name 
FROM recipes
WHERE MATCH('(@ingredients chocolate) | (@name cake)')
LIMIT 10;
于 2014-08-27T21:08:40.290 回答