我正在使用sphinx 2.0.4-release和SPH_MATCH_EXTENDED2查询语法。当我在查询中有一个“空值”时,即:
blah & ''
sphinx忽略了它,只搜索“blah”。当我使用字段搜索运算符并且最后一个空值时,它仍然以相同的方式工作:
@field1 blah @field2 ''
但是这个查询:
@field1 '' @field2 blah
导致错误:语法错误,'''@ field2 blah'附近出现意外的TOK_FIELDLIMIT。当然我可以修剪空值,但这种行为对我来说似乎不合逻辑......我做错了什么?或者它实际上是一个错误?
答案 0 :(得分: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'的内容完全是任意的。