我有一个带有字段ID,日期和状态的索引'order'。我需要让所有订单没有状态已关闭。
我的狮身人面像查询是:
SELECT id, status FROM order
WHERE MATCH('@status "!CLOSED"') AND id < 21;
+------+-------------+
| id | status |
+------+-------------+
| 10 | CLOSED |
| 1 | CLOSED |
| 4 | CLOSED |
| 5 | CLOSED |
| 7 | CLOSED |
| 9 | CLOSED |
| 14 | CLOSED |
| 18 | CLOSED |
| 19 | CLOSED |
+------+-------------+
9 rows in set (0.06 sec)
我哪里出错了?如果我想在多个领域不做怎么做? 你能帮我改写一下这个SphinxQL吗?
答案 0 :(得分:3)
您已将该字词放在词组运算符中,因此它会查找短语!CLOSED
- 但我怀疑您有这个词!在你的charset_table
被忽略,所以只是搜索CLOSED。
... WHERE MATCH('@status !CLOSED')
理论上会起作用。但是,狮身人面像不能仅仅使用&#39; NOT&#39;来执行查询。条款。 Sphinx有一个倒排索引,列出哪些单词在哪些文件中。它没有所有文件的列表,然后它可以删除&#39;特定的。
...所以你需要一份所有文件的清单。最简单的方法是在所有文档中添加一个假关键字,例如修改你的源代码定义(在sphinx.conf中)以添加类似于...的虚假字段。
sql_query = SELECT id,...,'_all' as fake FROM sqltable ...
然后可以在你的sphinx查询中使用它....
... WHERE MATCH('_all @status -CLOSED')