3

我试图了解 ElasticSearch Query DSL 的工作原理。如果有人能给我一个如何执行如下 MySQL 查询的搜索示例,那将会有很大帮助:

SELECT * FROM products 
WHERE shop_id = 1 
AND MATCH(title, description) AGAINST ('test' IN BOOLEAN MODE)
4

1 回答 1

3

假设您索引了一些至少包含 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提交查询。过滤器用于减少查询所针对的文档集。过滤器更快,因为不涉及评分和缓存。在我的示例中,我应用了一个顶级过滤器,这可能适合您,也可能不适合您,具体取决于您接下来要做什么。例如,如果您想创建一个构面,则该过滤器将在构面中被忽略。添加过滤器的另一种方法是过滤查询,在计算方面时也会考虑到这一点。

于 2013-04-20T16:18:29.343 回答