如何返回与列中的值不匹配的行



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

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

假设我在名为ids的表中添加了一个varchar列,该列包含由逗号等分隔的整数值。例如:

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

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

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

对吧?

然而,我想做的实际上是返回ids列中不包含特定ID的行。这可能吗?

编辑:

我想我找到了答案,因为我从SphinxQL文档中找到了"布尔表达式"或类似的东西,你可以简单地将确切的短语(在本例中是数字)放在引号中,然后在前面加一个减号。

因此,示例查询简单地变成:

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

我以为它有效,但没有。

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

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

然后这个查询:

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

没有返回那一行,因为斯芬克斯显然在"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文档中扩展出来,在"布尔表达式"或类似的东西下发现,你可以简单地将确切的短语(在本例中是数字)放在引号中,然后在前面加一个减号。

因此,示例查询简单地变成:

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

我测试了它,它似乎有效!

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

最新更新