2012-08-09 46 views
1

是否可以通過Sphinx從空查詢中排除某些關鍵字?從Sphinx空查詢中排除關鍵字

我想到的是使用Extended2匹配模式,並且爲了排除關鍵字,我將使用-!運算符。我只需要通過Sphinx獲取數據而不使用任何查詢(排除運算符除外)。

在獅身人面像,我使用下面的方法獲取數據:

$data = $sphinx->query(''); 

此查詢返回不具有匹配任何(這意味着它會返回所有數據的數據,當然僅限於查詢限制)。問題是,如果我添加關鍵字!或 - 運營商,它不會返回任何東西。例如:

$data = $sphinx->query('-google'); 

$data返回爲false

也許有這個工作的另一種方法。請幫忙。 謝謝。

回答

3

獅身人面像不像僅否定否定查詢。如果你檢查GetLastError()/ GetLastWarning()它會明確地這樣說。

主要原因是,它不能很好地使用它的索引。獅身人面像是基於倒排索引的概念。因此,要運行此查詢,它需要獲取每個文檔的列表,然後刪除與關鍵字匹配的列表。

但你讓它工作。只需要給獅身人面像一個關鍵字,將在每一個單一的文件。然後可以做

$data = $sphinx->query('popularword -google'); 

如果你沒有一個字taht將每一份文件,只需添加一個假的:)

sql_query = SELECT id, '__ALL__' as dummy, title ....... 

然後可以做

$data = $sphinx->query('__ALL__ -google'); 

由於字將在每個文件上。

不要期望查詢速度非常快。

+0

謝謝..我認爲這是我需要..我會嘗試,如果這個工程.. – 2012-08-10 03:09:18

2

據瞭解,這是不可能的。 Sphinx將無法計算任何涉及搜索整個集合的查詢。

對於這兩個選項,允許你使用-,明確這是在文檔中表示不可能:

SPH_MATCH_BOOLEAN

查詢,如「狗樣」,其隱含包括所有文件該集合,不能被評估。

SPH_MATCH_EXTENDED

但是,查詢必須能夠計算不涉及的所有文件

簡短的回答是一個隱含的清單:不,這是不可能的。唯一的選擇是如果你想實現這個關鍵字的小列表,那麼你可以在你的數據庫中添加一個標誌,並且如果文本包含這個關鍵字,則將值設置爲true。您可以從搜索結果中排除SetFilter()。我正在使用這個技巧從我的列表中排除包含特定關鍵字集的文檔。