ruby-on-rails - 太阳黑子和高级关联搜索

标签 ruby-on-rails ruby search solr sunspot

我的应用程序有 机器,它们具有并属于许多规范

class Machine < ActiveRecord::Base
  has_and_belongs_to_many :specs

规范同时具有字段(宽度、重量、容量、马力)和属性。

搜索完全通过 Solr 通过 Sunspot 完成。

我希望能够根据规范查找机器,例如查找宽度大于 50 的所有机器。

我知道我可以分别索引 spec_fieldspec_value,但它会过滤值超过 50 的规范,其中可能包含我不想要的字段,例如作为高度或容量(因此搜索宽度 > 50 将产生容量 > 50 的结果)。

理想情况下,我想将机器的每个规范及其值分配给它自己的索引字段,以便我的索引具有诸如“高度”或“重量”之类的字段,但规范是灵活的,有些机器有一套规范,而另一台机器有另一套规范,所以它看起来不太可行。

甚至可以用 Solr 完成吗?

最佳答案

找到解决方案

我找到的解决方案是使用描述的“动态字段”here

索引

dynamic_integer :specs do
  specs.inject({}) do |hash,spec|
    hash.merge(spec.spec_field.label.to_sym => spec.value)
  end
end

查询

  dynamic :specs do
    if params[:specs].present?
      for spec in params[:specs]
        case spec[:condition]
          when "gt"
            with(spec[:field]).greater_than(spec[:value])
          when "lt"
            with(spec[:field]).less_than(spec[:value])
          else
            with(spec[:field],spec[:value])
        end
      end
    end
  end

SOLR 在我看来越来越好!

关于ruby-on-rails - 太阳黑子和高级关联搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351435/

相关文章:

java - 搜索值最接近 N 的数组的索引 - Java

ruby-on-rails - 设计允许特殊字符的密码

ruby-on-rails - 在检查机器人的函数中使用中断时,Ruby 函数返回 true 而不是 false

sql - rails/SQL : count the number of consecutive records having a specific status

javascript - 如何使用 Controller 加载自定义js文件?

algorithm - 在无向图中查找不包含子循环的所有循环

javascript - 数据不是来自 Splunk Javascript sdk 的 JSON 格式

ruby-on-rails - 使用 OAuth 和 Rails 的注销路由

ruby-on-rails - 验证失败时设计自定义消息

python - 控制台中西里尔符号的问题