首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4弹性搜索使用多个搜索条件,结合搜索功能

Rails 4弹性搜索使用多个搜索条件,结合搜索功能
EN

Stack Overflow用户
提问于 2016-12-08 03:16:18
回答 2查看 658关注 0票数 1

我在一个项目中使用弹性搜索-rails,有一个组合搜索特性,所有列都在一个表中。我只是写了一个自定义的搜索函数,而搜索dsl没有工作,不能有任何结果。

代码语言:javascript
复制
def self.combine_search_filter(remark=nil, sim_card_supplier_id=nil, work_mode=nil, operator_status=nil, platform_management_status=nil, online_status=nil, sim_card_set_id=nil, iccid_from=nil, iccid_to=nil, actived_at_from=nil, actived_at_to=nil, check_in_at_from=nil, check_in_at_to=nil, device_mac_from=nil, device_mac_to=nil)
    response = __elasticsearch__.search(
      "size": 1000,
      "query": {
        "filtered": {
          "filter":   {
            "bool": {
              "filter":   [
                { "term":  { "sim_card_supplier_id": sim_card_supplier_id } },
                { "term":  { "work_mode": work_mode } },
                { "term":  { "operator_status": operator_status } },
                { "term":  { "platform_management_status": platform_management_status } },
                { "term":  { "online_status": online_status } },
                { "term":  { "sim_card_set_id": sim_card_supplier_id } }
                { "range": { "iccid": { "from": iccid_from, "to": iccid_to }}},
                { "range": { "check_in_at": { "from": check_in_at_from, "to": check_in_at_to }}},
                { "range": { "actived_at": { "from": actived_at_from, "to": actived_at_to }}},
                { "range": { "device_mac": { "from": device_mac_from, "to": device_mac_to }}}
              ]
            }
          }
        }
      }
    )
end

而平行线可能通过零,我如何才能使搜索dsl有效?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-08 05:09:49

我的错,我刚刚搞清楚了,ruby关键字函数应该是这样的:

代码语言:javascript
复制
def self.combine_search_filter(options = {})
    response = __elasticsearch__.search(
      "size": 1000,
      "query": {
        "filtered": {
          "filter":   {
            "bool": {
              "filter":   [
                { "term":  { "sim_card_supplier_id": 104 } },
                { "term":  { "work_mode": options[:work_mode] } },
                { "term":  { "operator_status": options[:operator_status] } },
                { "term":  { "platform_management_status": options[:platform_management_status] } },
                { "term":  { "online_status": options[:online_status] } },
                { "term":  { "sim_card_set_id": 76 } },
                { "range": { "iccid": { "from": options[:iccid_from], "to": options[:iccid_to] }}},
                { "range": { "check_in_at": { "from": options[:check_in_at_from], "to": options[:check_in_at_to] }}},
                { "range": { "actived_at": { "from": options[:actived_at_from], "to": options[:actived_at_to] }}},
                { "range": { "device_mac": { "from": options[:device_mac_from], "to": options[:device_mac_to] }}}
              ]
            }
          }
        }
      }
    )
end

这个搜索将得到正确的结果。选项:键可能为零将导致错误的结果,所以我将删除dsl散列的零键,然后将其传递给search()

票数 0
EN

Stack Overflow用户

发布于 2016-12-08 06:50:06

我建议您在rails中使用搜索踢 gem,这样可以使弹性搜索变得如此简单,并使您的搜索更智能,查询更简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41031187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档