如何 return 与列中的值不匹配的行?

How to return rows that do not match a value in a column?

Sphinx 文档有一个使用 SphinxQL 的简单示例:

SELECT * FROM test WHERE MATCH('@title hello @body world')

假设我向名为 ids 的 table 添加了一个 varchar 列,其中包含由逗号等内容分隔的整数值。例如:

-------------------------------
| title | body  | ids         |
-------------------------------
| hello | world | 5,251,87580 |
-------------------------------

如果我想将上面的示例查询修改为仅包含特定 ID 的 select 行,那么我 认为 我可以简单地将其更改为:

SELECT * FROM test WHERE MATCH('@title hello @body world @ids 251')

对吗?

但是,我想做的实际上是 return 行 ids 列中包含特定 ID。这可能吗?

编辑:

我想我找到了答案,因为我从 "boolean expressions" 下找到的 SphinxQL 文档或类似的东西中分支出来,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面打一个负号。

所以示例查询简单地变成:

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')

我认为它有效,但它没有。

如果我将不想匹配的ID从251更改为11,并且table中存在以下列:

-------------------------------
| title | body  | ids         |
-------------------------------
| hello | world | 5,111,87580 |
-------------------------------

然后这个查询:

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"11"')

不是 return 那一行,因为 Sphinx 显然匹配“111”内部的“11”。

有我的conf设置:

index_field_lengths = 1
morphology          = stem_en
min_word_len        = 1
min_prefix_len      = 1
prefix_fields       = name
expand_keywords     = 1

我从 SphinxQL 文档分支出来,发现在 "boolean expressions" 或类似的东西下,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面放一个减号。

因此示例查询简单地变为:

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')

我测试了一下,好像可以用!

我想我会把问题留在这里,以防其他人发现它有用:-)