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

时间:2015-03-24 20:37:58

标签: sphinx sphinxql

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

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

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

-------------------------------
| 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,我不想从25111匹配,并且表格中存在以下列:

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

然后这个查询:

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

不会返回该行,因为Sphinx显然匹配" 11"在" 111"内部。

有我的conf设置:

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

1 个答案:

答案 0 :(得分:0)

我从SphinxQL文档中扩展并在“布尔表达式”或类似的东西下找到,你可以简单地将确切的短语(或在这种情况下,数字)放在引号中,然后在前面加上一个减号。

因此示例查询变为:

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

我测试了它,它似乎工作了!

我想我会在其他人可能觉得有用的情况下留下这个问题: - )