2010-09-17 81 views
0

我有此表達其正在按預期在思考斯芬克斯:如何在(思考)sphinx extended2模式下進行屬性匹配?

Customer.search :with => {:signer_id => 23} 

但我需要編寫一個表達式與某些屬性的OR,像signer_id是23或admin_level是42,所以移動到擴展匹配模式和寫這個:

Customer.search "@signer_id 23", :match_mode => :extended2 

它根據我的Sphinx relevant documentation的理解,應該是等價的,但它並沒有在所有匹配任何內容。任何想法我做錯了什麼?我如何寫一個思維擴展的獅身人面像表達式?

複製和從控制檯粘貼:

ruby-1.8.7-p302 > Customer.search(:with => {:signer_id => 23}).count 
=> 20 
ruby-1.8.7-p302 > Customer.search "@signer_id 23", :match_mode => :extended2 
=> [] 
ruby-1.8.7-p302 > Customer.search("@signer_id 23", :match_mode => :extended2).count 
=> 0 

更新:固定的ID(32 - > 23)。

回答

0

我這樣做是爲了匹配我已標準化的字段。這可以通過在全文搜索中使用相同的文本來減少數據庫中的流失量。

查詢:'pizza | @product_codes(965 | 1636 | 1848 | 2939 | 4227 | 5067 | 5735)| @brand_codes(1485)| @service_codes(2782)

請注意,由於其他答案指出你不能這樣做屬性,這些都必須是索引字段。

我蠻力它們像這樣:

 indexes '(select group_concat(products.id) from business_products inner join products on (products.id = business_products.product_id) where business_id = `businesses`.`id` group by business_id)', :as => :product_codes, :type => :integer 

此外,您將需要設置這個

min_word_len: 1 

減少一個字的字符數,否則它不會匹配你1和2位數字代碼。

+0

我犯了同樣的錯誤和數學奧運會;他們不敢相信像我這樣的白癡竟然贏了它;)無論如何,我只是在這裏犯了錯誤,代碼很好,仍然沒有工作。 – Pablo 2010-09-17 16:16:20

+0

我在這裏重寫了我的答案。 – 2010-09-20 03:40:52

0

我沒有發現文檔中說您可以使用@attribute value語法的部分 - 它只用於字段,而不用於屬性。至少,這是我的理解。如果我錯了,將是太棒了:)

+0

字段和屬性之間有什麼區別? – Pablo 2010-09-19 09:07:48

+0

字段是您的記錄的文本數據 - 即:所有應與搜索查詢匹配的字詞。屬性是整數,時間戳,布爾值,浮點數來對結果進行排序和過濾。閱讀本頁上的字段和屬性部分:http://freelancing-god.github.com/ts/en/sphinx_basics.html – pat 2010-09-21 02:21:27

+0

@pat抱歉評論一個兩歲的線程,但是你不是嗎? ThinkingSphinx的作者?對於寫這個東西的人來說,這是一個非常謙遜的回答! – Samo 2012-09-26 16:34:09