【问题标题】:Elasticsearch - range filter with multimatch?Elasticsearch - 具有多重匹配的范围过滤器?
【发布时间】:2018-03-06 18:45:15
【问题描述】:

我正在使用弹性搜索来过滤服装:

  def self.search(query)
  __elasticsearch__.search(
  {
    query: {
      function_score: {
        query: {
          multi_match: {
            query: query,
            fields: ['description^30','material^10']
          },
        },
        field_value_factor: {
          field: "purchased"
        },
      }
    }
  }
)

结束

问题是我似乎无法通过购买次数来过滤它们:

      range: {
              purchased: {
                gte: 1000
             }
      }

无论我把它放在哪里,它都会给我以下错误:

[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":88}],"type":"parsing_exception","reason":"[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":88},"status":400}

如何正确编写范围过滤器/放置代码?有没有什么地方我可以阅读更多关于此的内容以了解应该如何安排哈希?

【问题讨论】:

    标签: ruby-on-rails elasticsearch search filter


    【解决方案1】:

    您可以使用bool/filter 查询来做到这一点:

      def self.search(query)
      __elasticsearch__.search(
      {
        query: {
          function_score: {
            query: {
              bool: {
                filter: [
                  {
                    multi_match: {
                      query: query,
                      fields: ['description^30','material^10']
                    }
                  },
                  {
                    range: {
                      purchased: { gte: 1000}
                    }
                  }
                ]
              }
            },
            field_value_factor: {
              field: "purchased"
            }
          }
        }
      }
    )
    

    【讨论】:

    • 感谢您的帮助,但我仍然遇到同样的错误。这绝对是正确的语法吗?
    • 请再试一次
    • 去掉最后一个逗号。当请求传递给 Elastic 时,这会改变它的序列化方式吗?
    • 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多