首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SphinxQL中“OR”的替换

SphinxQL中“OR”的替换
EN

Stack Overflow用户
提问于 2014-05-27 09:22:33
回答 1查看 1.7K关注 0票数 0

我目前正在尝试将Sphinx搜索引擎集成到Python应用程序中。问题是SphinxQL不像普通的SQL那样支持OR子句。有一些黑客可以使用,比如在SELECT中编写表达式,如下所示:

代码语言:javascript
复制
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表达式进行查询的方法,如:

代码语言:javascript
复制
SELECT *, quantity>=50 OR quantity=0 AS mycond FROM table1 WHERE mycond = 1;

无可救药地,它不能处理字符串属性。未解析此查询:

代码语言:javascript
复制
SELECT *, category='foo' OR category='bar' AS mycond FROM table1 WHERE mycond = 1;

然而,这在Beta 2.2.3中是可行的:

代码语言:javascript
复制
SELECT * FROM table1 WHERE category='foo';

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

EN

回答 1

Stack Overflow用户

发布于 2014-08-27 21:08:40

对于属性/ facet或in,我认为您是正确的,唯一的方法是在SELECT子句中添加表达式。

但是,对于字符串,请查看关于全文查询语法的文档。您不能确切地使用OR关键字,但是这样的操作应该可以:

代码语言:javascript
复制
SELECT id, name 
FROM recipes
WHERE MATCH('(@ingredients chocolate) | (@name cake)')
LIMIT 10;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23885643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档