如何优化弹性搜索查询

时间:2017-03-21 22:59:17

标签: php elasticsearch

我在过去几个月一直在阅读弹性搜索文档,并继续优化我的查询,但我似乎无法在500-600毫秒以下获得搜索查询。在本地数据较少的情况下,我可以在~80-200ms内获得响应。

概述我要完成的任务:

我在Laravel中有12种不同的模型,可以从一个搜索栏中搜索。作为某人的类型,它会被搜索并返回到结果列表中。

目前,我有这个搜索查询。有没有提及我如何改进这个?我查看了multi_match,但是我遇到了部分匹配和指定所有字段的问题。

$results = $this->elastic->search([
            'index' => config('scout.elasticsearch.index'),
            'type'  => $type ?? implode(',', array_keys($this->permissions, true, true)),
        'body'  => [
            'query' => [
                'bool' => [
                    'must'   => [
                        [
                            'query_string' => [
                                'query' => "$searchQuery*",
                            ],
                        ],
                    ],
                    'filter' => [
                        [
                            'term' => [
                                'account_id' => $accountId,
                            ],
                        ],
                    ],
                    'should' => [
                        [
                            'term' => [
                                '_type' => [
                                    'value' => 'customers',
                                    'boost' => 1.3,
                                ],
                            ],
                        ],
                        [
                            'term' => [
                                '_type' => [
                                    'value' => 'contacts',
                                    'boost' => 1.3,
                                ],
                            ],
                        ],
                        [
                            'term' => [
                                '_type' => [
                                    'value' => 'users',
                                    'boost' => 1.3,
                                ],
                            ],
                        ],
                        [
                            'term' => [
                                '_type' => [
                                    'value' => 'chart_accounts',
                                    'boost' => 1.2,
                                ],
                            ],
                        ],
                    ],
                ],
            ],
            'from'  => $from,
            'size'  => $size,
        ],
    ]);

0 个答案:

没有答案