我正在尝试了解ElasticSearch Query DSL的工作原理。 如果有人能给我一个如何执行搜索的例子,那将会有很多帮助:
SELECT * FROM products
WHERE shop_id = 1
AND MATCH(title, description) AGAINST ('test' IN BOOLEAN MODE)
答案 0 :(得分:3)
假设您索引了一些至少包含shop_id,title和description字段的文档,如下例所示:
{
"shop_id" : "here goes your shop_id",
"title" : "here goes your title",
"description" : "here goes your description"
}
您可以针对多个字段执行multi match query,并为它们赋予不同的权重(通常标题更重要)。您还可以将查询与shop_id上的term filter结合使用:
{
"query" : {
"multi_match" : {
"query" : "here goes your query",
"fields" : [ "title^2", "description" ]
},
"filter" : {
"term" : { "shop_id" : "here goes your shop id" }
}
}
您需要使用search API提交查询。过滤器用于减少查询执行的文档集。过滤器更快,因为不涉及评分和缓存。在我的示例中,我应用了top level filter,这可能适合或不适合您,具体取决于您接下来要做什么。例如,如果要创建构面,则会在构面中忽略过滤器。添加过滤器的另一种方法是在计算构面时考虑的因素是filtered query。