2017-02-06 7 views
1

Ich habe Probleme mit einer großen Suche.Laravel große angepasste Suche

Dies sind meine Tabellen

Fahrzeuge
id | Beschreibung | weight_max | weight_empty | Benutzer-ID | Kategorie_ID | type_id

Kategorien
ID | Name | Beschreibung | Farbe

Typen
ID | Name

vehicle_usages
id | Datum von | Datum zu | Fahrzeug_ID | Standort-ID | usage_type_id

Positionen
ID | Adresse | lat lng

Das Suchformular definiert zusätzliche die category, mehrere types, date from, date to, zip code, radius und benutzerdefinierte Kategorie Fahrzeugdaten verbunden.

Jetzt möchte ich die Fahrzeuge (im Moment etwa 10k Zeilen) nach oben genannten Kriterien filtern. Zuerst überprüfe ich, ob das Anfrage-Array die Kategorie enthält und ob der Wert eine ganze Zahl ist. Wenn ja, bekomme ich alle Fahrzeuge nach der Kategorie $vehicles = Vehicle::where('category_id', $request['category']); gefiltert.
Dann mache ich das gleiche mit den Typen und drücken Sie jeden Typ in ein Array, um $vehicles->whereIn('type_id', $types) zu verwenden.
Danach bekomme ich alle Fahrzeuge wie $vehicles = $vehicles->get().
Wenn es fertig ist, bekomme ich die aktuellen lat und lng per Postleitzahl und berechnen Sie den Radius für jedes Fahrzeug durch den aktuellen Standort. Wenn der Radius größer als der Eingang radius ist, lehne ich das Fahrzeug ab.
Zumindest jedes Fahrzeug mit einer vehicle_usage, die mit dem Eingang date from und date to überlappt wird abgelehnt.

Mit etwa 10k vehicles, wo jedes Fahrzeug hat etwa 5 vehicle_usages pro Monat diese Suche dauert sehr lange und erreicht die maximale Ausführungszeit (60 Sekunden).
Wie könnte ich meine Suche beschleunigen?

Antwort

0

Ich empfehle Ihnen, laravel scout und mit Algolia oder ElasticSearch zu verwenden. Dann wird Ihre Suche tausendmal schneller.

Wenn Sie keine Dienste von Drittanbietern verwenden möchten, können Sie die MySQL Full-Search-Funktion verwenden.

Folgen Sie den Links, um weitere Informationen zu erhalten.

+0

Ich sehe schon diese 3 Möglichkeiten. Aber in meinem Fall würde ich sagen, dass es nicht wirklich eine mögliche Ursache für die Radius-Suche ist, die durch die Benutzereingabe berechnet werden muss. Auch der aktuelle Standort eines Fahrzeugs hängt davon ab, ob es eine "Fahrzeugnutzung" gibt oder nicht – DestinatioN