0

如果现在在我的应用程序上设置 Thinking Sphinx

一切正常

直到我决定使用 Thinking Sphinx 进行条件查询

PartPriceRecord.search "50002" ,:conditions => { :supplier_id =>
"supp50002" },:star => true

它向我报告了上述错误

ThinkingSphinx::SphinxError: index part_price_record_core: query
error: no field 'supplier_id' found in schema

甚至看到 Ryan Bates Screencast ,他似乎也使用为该列定义的“ has ”方法实现了条件子句

就像是

 has :author_id

阅读 Pate Allen 的一篇文章向下滚动到底部

 :with should be used for attribute filters, and :conditions for
field queries. 

所以用子句改变我上面的代码

PartPriceRecord.search "PartNumber50002",:with => {:supplier_id =>
"supp50002" },:star => true

我没有得到错误的结果,因为我可以在数据库中看到 part_number "PartNumber50002" 的 "supplier_id" 记录

现在我很困惑

为什么会出现上述错误以及“字段”和“属性”之间的根本区别是什么

谁能帮忙

顺便说一句,我的索引定义

 define_index  do
   indexes part_number
   has supplier_id
 end

 sphinx_scope(:supplier) { |name|
   {:conditions => {:supplier_id => supplier}}
 }
4

1 回答 1

1

在 Sphinx 中,目前只能过滤数字属性。:supplier_id => "supp50002" 建议一个字符串属性。

我不明白红宝石或思考狮身人面像。但鉴于潜在的狮身人面像无法做到这一点,我猜想斯芬克斯不会允许这样做。

  • 字段,是来自原始数据集的文本列。Sphinx 对它们进行索引,并且它们可以通过主要的“全文查询”进行查询。

  • 而属性,只是按原样存储在索引中。它们对于检索[1]、排序、分组和直接过滤很有用。附带条件是不支持按字符串属性进行过滤。可以按其他属性过滤

[1] Sphinx 可以在结果集中返回属性的值;而没有存储字段 - 仅索引,因此您不会将它们取回

于 2012-05-24T13:41:00.610 回答