2

这是我的场景:

我正在开发一个基于Laravel 5.5的应用程序,该应用程序使用ScoutElasticSearch 驱动程序来执行研究。Laravel 应用程序正在使用内置服务器(php artisan serve)运行。

我的 elasticsearch 集群使用Laradock environment在docker上运行。我有一个包含以下项目的索引:

{
                "_index": "artworks",
                "_type": "artworks",
                "_id": "575",
                "_score": 9.206466,
                "_source": {
                    "fields": [
                        {
                            "name": "artwork_name",
                            "value": "Earl Mills",
                            "language": "it"
                        },
                        {
                            "name": "artwork_category",
                            "value": "Torp-Towne"
                        },
                        {
                            "name": "technique",
                            "value": "neque",
                            "language": "it"
                        },
                        {
                            "name": "subdivision",
                            "value": "facere",
                            "language": "it"
                        },
                        {
                            "name": "stamp",
                            "value": "Manuela Gulgowski"
                        },
                        {
                            "name": "cataloguer",
                            "value": "Cristal Lesch"
                        },
                        {
                            "name": "alt_dimensioni",
                            "value": "Sunt molestiae eligendi et sed doloremque dolor. Debitis provident saepe deleniti. Aperiam et sint quo vel repudiandae tempora dicta qui."
                        },
                        {
                            "name": "larg_dimensioni",
                            "value": "Et odit qui libero. Eaque molestiae itaque et sed enim et. Nihil quod ea odio distinctio. Voluptate tempore sit ad rerum."
                        },
                        {
                            "name": "prof_dimensioni",
                            "value": "Sed pariatur nihil quia quia dolorum illo. Quaerat est sed dolore et. Ab est possimus hic cum repudiandae vero qui. Quo sunt molestiae fugit perspiciatis dolores fugit."
                        },
                        {
                            "name": "Cartella_Serie",
                            "value": "Blanditiis incidunt quam dolor sunt. Labore voluptatem vero explicabo at molestiae eaque. Est ut incidunt voluptatibus ea impedit quos. Aspernatur dolorem unde vel ea."
                        },
                        {
                            "name": "Tiratura_Esemplare",
                            "value": "Omnis quis non sed et non est. Nobis et sit explicabo praesentium. Ut eveniet tempora ratione quae. Odit qui eum facilis odit nihil officiis."
                        },
                        {
                            "name": "Tiratura_Complessiva",
                            "value": "Fugit occaecati molestiae pariatur repellat mollitia. Eveniet iste quisquam et facilis. Iste accusantium magni quod magni architecto tempore quae. Beatae delectus sequi quibusdam et."
                        },
                        {
                            "name": "Firmato",
                            "value": "Provident quidem quam ut et quis. Consequuntur unde nesciunt eligendi asperiores. Nulla et voluptate ut dignissimos autem asperiores incidunt."
                        },
                        {
                            "name": "Titolo_per_ordinamento",
                            "value": "Eligendi consequatur odio reprehenderit quibusdam voluptatem. Veniam commodi necessitatibus dolorum dolorem voluptatum eveniet nobis. Optio dolores aspernatur odio non."
                        },
                        {
                            "name": "Note_Storico_Artistiche",
                            "value": "Sit a animi expedita dolore quos qui ea. Consectetur dignissimos aut natus nam animi. Aut vitae alias molestias. Cupiditate molestiae dolores dolorem sint dolores.",
                            "language": "en"
                        },
                        {
                            "name": "Note_Storico_Artistiche",
                            "value": "Eos optio aut explicabo delectus. Est nihil non id autem. Pariatur ea in eum odio.",
                            "language": "it"
                        }
                    ]
                }

该索引包含大约 1000 个项目,如上一个。我正在使用这样的查询测试性能:

{
   "query":{
      "bool":{
         "must":[
            [
               {
                  "match":{
                     "fields.value":"Manuela Gulgowski"
                  }
               }
            ]
         ]
      }
   }
}

使用 POST 方法直接调用 elasticsearch 实例的性能结果: http://localhost:9200/artworks/_search?pretty=true --> ~50ms

调用我的应用程序的性能结果: http://localhost:8000/api/v1/artworks/search?query=Manuela Gulgowski --> ~3500ms

两种方法每页返回 10 个元素。

我的方法很简单:

public function search(Request $request)
    {
        $query = $request->get("query");
        $artworks = Artwork::search($query)->paginate(10);
        return $this->sendResponse(new ArtworkCollectionResource($artworks));
    }

有人知道我是否遗漏了什么或者我可以通过哪种方式提高性能? 我完全理解使用我的应用程序 api 我无法获得 50 毫秒的响应,但我希望它至少会在 600-700 毫秒内响应。

更新 经过大量测试,我发现我的应用程序有时会在 ~900 毫秒内响应,有时在 ~3500 毫秒内响应,这种延迟差异是由 Scout 驱动程序中的分页引起的。

$results = Collection::make($engine->map(
            $rawResults = $engine->paginate($this, $perPage, $page), $this->model
        ));

我要进一步调查。

4

0 回答 0