1

我正在使用带有 SPH_MATCH_EXTENDED2 查询语法的 sphinx 2.0.4-release。当我的查询中有一个“空值”时,即:

blah & ''

sphinx 忽略它,只搜索“blah”。当我使用字段搜索运算符并且最后一个空值出现时,它仍然以相同的方式工作:

@field1 blah @field2 ''

但是这个查询:

@field1 '' @field2 blah

导致错误:语法错误,'''@field2 blah' 附近出现意外的 TOK_FIELDLIMIT。当然我可以修剪空值,但这种行为对我来说似乎不合逻辑......我做错了什么吗?或者它实际上是一个错误?

4

1 回答 1

0

Sphinx 使用倒排索引。它将文本分解为单词并存储(散列)它们。

因此它不索引“无”(它不是一个词) - 所以你不能搜索一个空字符串。

所有这些查询严格来说都是语法错误——而且是无稽之谈。但在某些情况下,sphinx 只会默默地处理无效语法(因为它会回退并认为它的单词 char,然后不在 charset_table 中等等) - 这样做会提出一个“有效”查询(只是不是你的意图)

解决方案是在索引时简单地将一个空字段变成一个“单词”,然后你就可以搜索空字符串了!

例如

sql_query = SELECT id, title, IF(field1 = '','EMPTY_STRING',field1) AS field1, .... 

然后你可以查询为

@field1 EMPTY_STRING @field2 blah

您用作“EMPTY_STRING”的内容完全是任意的。

于 2013-07-02T10:56:51.580 回答