我在搜索时遇到了麻烦。
这是我的表
车辆
id |描述| weight_max | weight_empty | user_id | category_id | TYPE_ID类别
id |名字|描述|颜色类型
id |名字vehicle_usages
id |日期来自|日期到| vehicle_id | location_id | usage_type_id地点
id |地址| lat | LNG
搜索表单包含category
,多个types
,date from
,date to
,zip code
,radius
和自定义类别相关的车辆详细信息
现在我想通过上面命名的标准来过滤车辆(目前大约10k行)。
首先,我检查请求数组是否包含类别,以及值是否为整数。如果是这样,我会使用$vehicles = Vehicle::where('category_id', $request['category']);
按类别过滤所有车辆
然后我对类型执行相同的操作,并将每种类型推送到数组中以使用$vehicles->whereIn('type_id', $types)
在此之后,我获得了$vehicles = $vehicles->get()
之类的所有车辆
如果已完成,我会通过邮政编码获取当前lat
和lng
,并按当前位置计算每辆车的半径。如果半径大于输入radius
,我拒绝车辆
至少每个vehicle_usage
与输入date from
和date to
重叠的车辆都会被拒绝。
通过大约10k vehicles
,每辆车每月约有vehicle_usages
,此搜索需要很长时间,并达到最长执行时间(60秒)。
我怎样才能加速搜索?
答案 0 :(得分:0)
我建议您使用laravel scout和Algolia或ElasticSearch。然后你的搜索速度会快一千倍。
如果您不想使用第三方服务,可以使用MySQL Full-Search功能。
按照链接获取更多信息。