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"')
我测试了它,它似乎有效!
我想我会把这个问题留在这里,以防其他人发现它有用:-)