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