Ruby on rails 太阳黑子与高级关联搜索
我的应用程序有Ruby on rails 太阳黑子与高级关联搜索,ruby-on-rails,ruby,search,solr,sunspot,Ruby On Rails,Ruby,Search,Solr,Sunspot,我的应用程序有机器,这些机器拥有并属于许多规格 class Machine < ActiveRecord::Base has_and_belongs_to_many :specs 类机器50将在结果中产生容量>50) 理想情况下,我希望将一台机器的每个规格与其值一起分配给它自己的索引字段,以便我的索引有“高度”或“重量”等字段,但规格是灵活的,有些机器有一组规格,而另一台机器有一组不同的规格,因此看起来它无法工作 用Solr能做到吗 您可以构造一个方法,为指定的数字范围和字符串值返回
机器
,这些机器拥有并属于许多规格
class Machine < ActiveRecord::Base
has_and_belongs_to_many :specs
类机器
规格同时具有字段
(宽度、重量、容量、马力)和值
属性
搜索完全是通过太阳黑子进行的
我希望能够找到一个基于其规格的机器,例如查找宽度大于50的所有机器
我知道我可以分别为spec_字段
和spec_值
编制索引,但它会过滤值大于50的spec,其中可能包括我不想要的字段,例如高度或容量(因此搜索宽度>50将在结果中产生容量>50)
理想情况下,我希望将一台机器的每个规格与其值一起分配给它自己的索引字段,以便我的索引有“高度”或“重量”等字段,但规格是灵活的,有些机器有一组规格,而另一台机器有一组不同的规格,因此看起来它无法工作
用Solr能做到吗 您可以构造一个方法,为指定的数字范围和字符串值返回TRUE,然后为该布尔值编制索引
def width_greater_than_50
(field == "width") && (value > 50)
end
然后将符号
:width\u大于\u 50作为要索引的对象传递。您可以构造一个方法,为指定的数字范围和字符串值返回TRUE,然后对该布尔值进行索引
def width_greater_than_50
(field == "width") && (value > 50)
end
然后将符号:width\u大于\u 50
作为要索引的对象传递。找到解决方案
我找到的解决方案是使用所描述的“动态字段”
索引
dynamic_integer :specs do
specs.inject({}) do |hash,spec|
hash.merge(spec.spec_field.label.to_sym => spec.value)
end
end
质疑
索尔在我看来越来越好 找到解决方案
我找到的解决方案是使用所描述的“动态字段”
索引
dynamic_integer :specs do
specs.inject({}) do |hash,spec|
hash.merge(spec.spec_field.label.to_sym => spec.value)
end
end
质疑
索尔在我看来越来越好 它将如何工作?我知道这将索引机器的宽度是否超过50,但现在我需要搜索超过200的“容量”。我不能索引所有可能的搜索查询。哦,我误解了;我认为这是一个索引问题。听起来你有更多的疑问。这是正确的吗?我把它看作是索引和查询问题,主要是因为我不知道如何做。。。如果您查看solr.CurrencyField,就会看到它是如何以“amount,currency”格式存储的,然后它就能够以某种方式搜索它。我觉得这是一个我应该关注的方向,但仍然没有线索。它将如何工作?我知道这将索引机器的宽度是否超过50,但现在我需要搜索超过200的“容量”。我不能索引所有可能的搜索查询。哦,我误解了;我认为这是一个索引问题。听起来你有更多的疑问。这是正确的吗?我把它看作是索引和查询问题,主要是因为我不知道如何做。。。如果您查看solr.CurrencyField,就会看到它是如何以“amount,currency”格式存储的,然后它就能够以某种方式搜索它。我觉得这是我应该关注的一个方向,但仍然没有线索。如果我能给你发很多荣誉点数,我会的。这是完美的:)+1如果我能给你很多声誉点,我会的。这是完美的:)