【问题标题】:ElasticSearch: A query that allows nil parametersElasticSearch:允许零参数的查询
【发布时间】:2018-08-22 04:29:37
【问题描述】:

所以我在 Rails 中的模型的 ElasticSearch 关注点中有以下模块。

这是可行的,但是如何让每个 bool 查询(must、must_not、filter)接受 nil 或空参数?

如果我传递一个空的query_string,它将获取所有文件。 然后当我传递一个空的size 参数时,它将返回所有尺寸。

  module ClassMethods
    def home_page_search(query_string, size, start_date, end_date)
      search({
        query: {
          bool: {
            must: [
              {
                multi_match: {
                  query: query_string,
                  fields: [:brand, :name, :notes, :size_notes]
                }
              }
            ],
            must_not: [
              range: {
                unavailable_dates: { gte: start_date, lte: end_date }
              }
            ],
            filter: [
              { term: { size: size } }
            ]
          }
        }
      })
    end
  end

【问题讨论】:

    标签: ruby-on-rails elasticsearch


    【解决方案1】:

    我通过更多地根据需要构建查询字符串解决了类似的问题,所以我只包含一个子句,如果有一个搜索词。我发送给 Elasticsearch 的查询仅包含用户实际设置的术语。例如:

    if size.present?
      query[:query][:bool][:filter] = { term: { size: size } }
    end
    

    (假设查询的正确表示等)

    【讨论】:

    • 这个问题已经在我这边解决了,我就是这样做的。我会将此标记为正确答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2021-07-30
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多