2013-07-02 37 views
1

我正在使用SPH_MATCH_EXTENDED2查询语法的sphinx 2.0.4版本。当我在我的查询中有一个“空值”时,例如:SPHINX字段搜索运算符问题

blah & '' 

sphinx忽略它并搜索“blah”。它仍然以同样的方式,当我使用字段搜索操作符和空值排在最后:

@field1 blah @field2 '' 

但此查询:

@field1 '' @field2 blah 

原因错误:语法错误,意想不到的TOK_FIELDLIMIT附近的'‘’@ field2等等。当然,我可以减少空值,但这种行为似乎对我来说不合逻辑...我做错了什么?或者它实际上是一个错误?

回答

0

狮身人面像使用倒排索引。它将文本分解为单词和存储(哈希)。

因此,它不索引'没有'(它不是一个字) - 所以你不能搜索一个空字符串。

所有这些查询都是严格的语法错误 - 而且是无稽之谈。但是在某些情况下,狮身人面像只会无声地处理无效的语法(因为它会退后并认为它的字符char,然后它们不在charset_table中,于是就这样) - 并且这样做了一个'有效'的查询你的意图)

解决的办法是在索引时简单地将一个空字段变成一个'单词',然后你可以搜索空字符串!

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

然后,你可以查询作为

@field1 EMPTY_STRING @field2 blah 

你为 'EMPTY_STRING' 用什么完全是任意的。

+0

感谢您的回答!是的,我知道空场的诀窍。但是我的问题有点不同:为什么第二个查询有效,第三个查询不是?我很抱歉,但你的解释并不清楚,你能详细解释一下吗? –

+0

对不起,我不能。我不知道“为什么”;我也不特别关心。它只是知道它不工作。 – barryhunter

+0

好的,谢谢! –