Sphinx 查询索引:排除包含特定值的行

问题描述 投票:0回答:1

我有一个带有以下列的 Sphinx 索引

id 文章_id 国家/地区_id
1 1 1
2 1 2
3 1 3
4 2 2
5 2 3
6 3 4
7 4 1
8 4 2
9 5 1

我需要获取完全不包含country_id = 1的article_ids,因此2和3。

问题是 Sphinx 不支持联接,也不支持子查询,所以我只能创建一个简单的选择查询,而不是 2 和 3,我得到 1、2、3、4,实际上只排除了 5。

有没有办法在 Sphinx 中构建一个返回 2 和 3 的查询?

简化的 Sphinx 索引如下所示:

sql_query_pre = SET @a := 0;

    sql_query = \
\
SELECT \
@a := @a + 1 AS id, \
ase.id AS search_id, \
ase.name, \
ase.article_id, \
af.country_id, \
FROM articles_search ase \
LEFT JOIN articles a ON a.id = ase.article_id \
LEFT JOIN affiliation_article aa ON aa.article_id = ase.article_id \
LEFT JOIN affiliations af ON aa.affiliation_id = af.id \

sql_attr_bigint=country_id
sql_attr_bigint=article_id
}

查询是

SELECT article_id, WEIGHT() w FROM articles WHERE MATCH('(@name nasicon)') AND country_id != 9 GROUP BY article_id ORDER BY w DESC LIMIT 0, 15 OPTION max_matches = 200

sphinx
1个回答
0
投票

似乎是一个明确的案例

HAVING

SELECT article_id, WEIGHT() w, SUM(country_id = 1) AS has1
FROM articles
WHERE MATCH('(@name nasicon)')
GROUP BY article_id
HAVING has1 = 0
ORDER BY w DESC
LIMIT 0, 15 OPTION max_matches = 200

SUM 计算组(即文章)中所有行中的

country=1
,并且仅返回文章中没有国家 = 1 文档的行。

© www.soinside.com 2019 - 2024. All rights reserved.