2013-07-02 36 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

好的,謝謝! –