因此,在我的Rails模型中,我在ElasticSearch关注项中包含以下模块。
这是可行的,但是如何使每个布尔查询(必须,must_not,过滤器)接受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
答案 0 :(得分:1)
我通过根据需要构造查询字符串来解决了类似的问题,因此,只有在有搜索词的情况下,我才包含一个子句。我发送给Elasticsearch的查询仅包含用户实际设置的条款。例如:
csrftoken
(假设查询的正确表示等)