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,我不想从251
到11
匹配,并且表格中存在以下列:
-------------------------------
| 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
答案 0 :(得分:0)
我从SphinxQL文档中扩展并在“布尔表达式”或类似的东西下找到,你可以简单地将确切的短语(或在这种情况下,数字)放在引号中,然后在前面加上一个减号。
因此示例查询变为:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')
我测试了它,它似乎工作了!
我想我会在其他人可能觉得有用的情况下留下这个问题: - )