如何在 SphinxQL 中使用 SNIPPET 功能?

How to use SNIPPET function in SphinxQL?

我有一个索引:

--------------------------------------------------
| id |  name  | folder | tag1  | tag2  |  topic  |
--------------------------------------------------
| 1  | file 1 |  AAA   | [1,2] | [3,4] |    1    |
--------------------------------------------------  
| 2  | file 2 |  BBB   |  [1]  | [4,5] |    1    |
--------------------------------------------------  
| 3  | file 3 |  AAA   |  [2]  |  [4]  |    2    |
--------------------------------------------------  

我需要做的是按标签过滤文件,下面的请求工作正常:

SELECT id, name,
  ANY(var=1 FOR var IN tag1) as tag_filter_1, 
  ANY(var=5 FOR var IN tag2) as tag_filter_2,
  GROUP_CONCAT(id) as files 
FROM index 
WHERE tag_filter_1 = 1 AND tag_filter_2 = 1
GROUP BY topic;

现在我需要修改查询以仅对来自 AAA 文件夹的文件应用 tag1 过滤器,同时保留从所有文件夹中按 tag2 过滤。

我正在考虑 OR 条件,但它不受支持。此外,选项是使用 GROUP_CONCAT(tag1) 然后在 PHP 中过滤 Sphinx 结果,但 tag1 是JSON,不是标量。

我想知道是否可以使用 SNIPPET 或 IF 函数来解决这个问题,以及如何解决。或者有什么其他想法?

可能有点难看,但可以做到...

SELECT id, name, 
  ANY(var=1 FOR var IN tag1) OR NOT folder='AAA' AS tag_filter_1, 
  ANY(var=5 FOR var IN tag2) AS tag_filter_2
FROM index WHERE tag_filter_1 = 1 AND tag_filter_2 = 1;

tag_filter_1 成为应用 tag1 过滤器,OR 不是 AAA 文件夹。


所以AAA文件夹中的文档,需要匹配tag1过滤器(因为无法匹配第二部分)

.. 但由于 OR,其他文件夹中的文档将始终匹配,因此 tag1 过滤器将被忽略。

(没有 != 字符串运算符,所以需要反转 = 运算符的使用 :)