SPHINX字段搜索运算符问题

时间:2013-07-02 10:23:57

标签: full-text-search syntax-error sphinx

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

blah & ''

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

@field1 blah @field2 ''

但是这个查询:

@field1 '' @field2 blah

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

1 个答案:

答案 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'的内容完全是任意的。

相关问题