2014-02-13 63 views
0

在我的配置文件相同的查詢..Sphinx搜索/過濾器可提供不同則結果與數據庫

sql_query = select pr.id, pr.sf_skus, pr.name, pr.description, pr.sf_vendors, 
      pr.sf_product_kw, \ 
      pr.sf_family_kw, pr.sf_class_kw, pr.sf_group_kw, pr.sf_category_kw, \ 
      pr.sf_sku_descriptions, \ 
      pc.item_category_id, pc.item_group_id, pc.item_class_id, \ 
      pc.item_family_id \ 
      from products as pr \ 
      left join product_cats as pc on pc.product_id = pr.id 

sql_attr_uint = item_category_id 
sql_attr_uint = item_group_id 
sql_attr_uint = item_class_id 
sql_attr_uint = item_family_id 

當我運行....

search --filter item_family_id 12 

我一共拿到了26份文件中找到。

當我運行的數據庫(完全相同的查詢(我認爲))上

...

select pr.id, pr.sf_skus, pr.name, pr.description, pr.sf_vendors, pr.sf_product_kw, 
pr.sf_family_kw, pr.sf_class_kw, pr.sf_group_kw, pr.sf_category_kw, 
pr.sf_sku_descriptions, 
pc.item_category_id, pc.item_group_id, pc.item_class_id, 
pc.item_family_id 
from products as pr 
join product_cats as pc on pc.product_id = pr.id 

where pc.item_family_id = 12 

我得到41個結果。

這兩個不應該一樣嗎?我究竟做錯了什麼。 TIA

+0

嘗試通過sphinxapi或sphinxql運行查詢。不要使用'搜索'工具,它的維護和非常破碎。它已從最新版本的獅身人面像中刪除,因爲它被遺忘了。 – barryhunter

回答

0

首先,您使用不同的連接(第一個查詢中的LEFT JOIN和第二個JOIN)。其次,你可以運行mysql客戶端和使用看你的內容編制索引:

SELECT * FROM your_index LIMIT 100; 

它可以爲你的查詢sphinx只返回結果的一部分。

+0

Typo在實際的設置中都是左連接,而且我確定它不是限制或返回結果的數量問題。另外我使用postgres而不是mysql不確定是否有問題。 – Ominus

+0

是的,我知道你使用postgres。我的意思是說sphinxsearch有一個sql客戶端(比如'psql' for postgres),你可以使用'mysql'運行。你可以在這裏找到一個例子(http://sphinxsearch.com/docs/archives/1.10/sphinxql.html)。 –