【问题标题】:Elasticsearch for laravel - Get documents matching one or more categories?Elasticsearch for laravel - 获取匹配一个或多个类别的文档?
【发布时间】:2016-07-13 16:28:04
【问题描述】:

以下代码适用于我并返回与查询匹配的博客文章

 $params = [
            'index' => 'blog',
            'type' => 'post',
            'body' => [
                'query' => [
                    'multi_match' => [
                        'query' => $request->get('query'),
                        'fields' => ['title', 'description']
                    ]
                ]
            ]
        ];
$response = \Elasticsearch::search($params); // works perfect

如何更改上面的代码,以便我可以获取其类别与 $categories 值之一匹配的所有文档

$categories 变量是我从复选框中获取的变量,

我尝试使用下面的代码,但由于某种原因它返回空结果:

 // $categories = $request->get('categories');
 $categories = ["News", "Technology"];
 $params = [
            'index' => 'blog',
            'type' => 'post',
            'body' =>  [

                "query"=> [
                    "filtered"=> [
                        "query"=> [
                            "match_all"=> []
                        ],
                        "query"=>[
                            "terms"=> [
                                "category"=> $categories
                            ]
                        ]

                    ]
                ]
            ]
        ];

 $response = \Elasticsearch::search($params); // return 0 hits

关于如何根据一个或多个类别获取文档而不是根据匹配词获取文档的任何想法?

【问题讨论】:

    标签: php laravel elasticsearch elasticsearch-plugin


    【解决方案1】:

    您在 filtered 子句中的同一级别上有两个 query 子句,这是不允许的。

    "query"=> [
                        "filtered"=> [
                            "query"=> [  <-- (1)
                                "match_all"=> []
                            ],
                            "query"=>[ <-- (2)
                                "terms"=> [
                                    "category"=> $categories
                                ]
                            ]
    
                        ]
    

    如果您尝试仅查询类别,则应删除第一个子句。您可以将查询编写为

                      "query"=> [
                        "filtered"=> [
                            "query"=>[
                                "terms"=> [
                                    "category"=> $categories
                                ]
                            ]
                         ]  
                        ]
    

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多