Searchkick高级搜索正文子句使where子句无效
如果我使用searchkick进行高级搜索,请搜索如下弹性搜索:
products = Activity.search body: {query: {bool: {must: [{ range: { min_age: {lte: 5} } }, { range: { max_age: {gte: 3} } } ] } } }, where: { category: "Programs", start_time: '2015-07-22' }
…没有应用where子句。 这是预期的吗? 我必须使用body来实现我的所有查询吗? 有没有办法在searchkick中解决这个问题?
慢日志输出:
[2015-07-29 21:03:53,369][INFO ][index.search.slowlog.query] [ES Dev] [activities_development_20150729165655530][2] took[21.1ms], took_millis[21], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"bool":{"must":[{"range":{"min_age":{"lte":5}}},{"range":{"max_age":{"gte":3}}}]}}}], extra_source[],
我想你需要尝试这个:
products = Activity.search body: {bool: {must: [{ range: { min_age: {lte: 5} } }, { range: { max_age: {gte: 3} } } ] } }, where: { category: "Programs", start_time: '2015-07-22' }
不同之处在于body
在第一级不包含query
字段。 我认为searchkick假设body
是query
部分,如果where
子句存在,它会将它转换为filtered
查询。
试试看…
conditions = { category: "Programs", start_time: '2015-07-22' } query = Activity.search params[:query], execute: false, where : conditions query.body[:query] = {bool: {must: [{ range: { min_age: {lte: 5} } }, { range: { max_age: {gte: 3} } } ] } } query.body[:size] = 10 query.execute