Elasticsearch – 具有多匹配的范围filter?
我正在使用弹性搜索来过滤服装:
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}
如何正确编写范围filter/放入代码? 有什么地方我可以阅读更多关于这一点,以了解应该如何安排哈希?
您可以使用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" } } } } )