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')
正确的?
但是,我想要做的实际上是返回列中不包含特定 ID 的ids
行。这可能吗?
编辑:
我想我找到了答案,正如我在“布尔表达式”或类似内容下找到的 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 显然匹配“111”内的“11”。
有我的conf设置:
index_field_lengths = 1
morphology = stem_en
min_word_len = 1
min_prefix_len = 1
prefix_fields = name
expand_keywords = 1