这是我的情况:
我正在开发基于Laravel 5.5的应用程序,该应用程序使用Scout和ElasticSearch Driver进行研究。 Laravel应用正在使用内置服务器(php artisan服务)运行。
我的elasticsearch集群正在使用docker在Laradock environment上运行。 我有一个包含这样的项目的索引:
{
"_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->约3500毫秒
这两种方法都返回一页10个元素。
我的方法很简单:
public function search(Request $request)
{
$query = $request->get("query");
$artworks = Artwork::search($query)->paginate(10);
return $this->sendResponse(new ArtworkCollectionResource($artworks));
}
有人知道我是否缺少某些东西,或者可以通过哪种方式提高性能? 我完全理解使用我的应用程序api不能获得50ms的响应,但是我希望它至少在600-700ms左右可以响应。
更新 经过大量测试,我发现我的应用有时在约900毫秒内响应,而其他时候在约3500毫秒内响应,而这种延迟差异是由Scout驱动程序中的分页引起的。
$results = Collection::make($engine->map(
$rawResults = $engine->paginate($this, $perPage, $page), $this->model
));
我要进一步调查。