0

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
4

1 回答 1

0

我从 SphinxQL 文档中分支出来,在“布尔表达式”或类似内容下发现,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面加上减号。

所以示例查询简单地变成:

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

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

我想我会把这个问题留在这里,以防其他人发现它有用:-)

于 2015-03-24T20:56:00.380 回答