Elasticsearch - 多重匹配的范围过滤器? [英] Elasticsearch - range filter with multimatch?

查看:5543
本文介绍了Elasticsearch - 多重匹配的范围过滤器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  def self.search(query)
__elasticsearch__。搜索(
{
query:{
function_score:{
query:{
multi_match:{
query:query,
fields:[ 'description ^ 30','material ^ 10']
},
},
field_value_factor:{
字段:购买
},
}
}
}

end



问题是我似乎无法过滤他们多少次,他们购买这样的:

 范围:{
购买:{
gte:1000
}
}

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

$ $ $ $ $ $ $ $ $ ] {error:{root_cause:[{type:parsing_exception,reason:[range] malformed query,expect但找到[END_OBJECT],但找到[FIELD_NAME],line:1,col:88}],type:parsing_exception,reason:[range] malformed query,expected [END_OBJECT] [FIELD_NAME],line:1,col:88},status:400}

如何正确地写入范围过滤器/放置代码?有什么地方我可以阅读更多关于这个了解如何应该安排哈希应该安排?
解决方案

你可以这样做使用 bool / filter 查询:

  def self.search(query )
__elasticsearch __。search(
{
query:{
function_score:{
query:{
bool:{
filter:[
{
multi_match:{
query:query,
fields:['description ^ 30','material ^ 10']
}
},
{
范围:{
购买:{gte:1000}
}
}
]
}
},
field_value_factor:{
field:purchased
}
}
}
}


I'm using elastic search to filter outfits:

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

end

The problem is I can't seem to filter them by how many times they were purchased like this:

      range: {
              purchased: {
                gte: 1000
             }
      }

Wherever I put this, it gives me the following error:

[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}

How do I write the range filter properly/put the code? Is there somewhere I can read more about this to understand how the hash should should be arranged?

解决方案

You can do it like this with a bool/filter query:

  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"
        }
      }
    }
  }
)

这篇关于Elasticsearch - 多重匹配的范围过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆