Suchen mehrerer Schlüsselwörter in mehreren Spalten mit geordneter Relevanz in Laravel
Die Implementierung von Suchfunktionen mit mehreren Schlüsselwörtern in mehreren Datenbankspalten kann insbesondere eine Herausforderung sein wenn die Ergebnisse nach Relevanz geordnet werden müssen. In Laravel gibt es mehrere Ansätze, um dieses Problem anzugehen.
Ansatz mithilfe von Datenbankabfragen
Eine Möglichkeit, das Problem anzugehen, besteht darin, mehrere Datenbankabfragen zu erstellen, auf deren Grundlage Ergebnisse abgerufen werden spezifische Kriterien. Hier ist eine mögliche Implementierung:
$word1 = 'word1'; $word2 = 'word2'; $word3 = 'word3'; $all = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->where('meta_name', 'like', "%{$word3}%") ->orWhere(function($query) use ($word1, $word2, $word3) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%") ->where('meta_description', 'like', "%{$word3}%"); }); $twoWords = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->orWhere(function($query) use ($word1, $word2) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%"); }) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->orWhere('meta_description', 'like', "%{$word1}%") ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id')); $posts = $all->union($twoWords)->union($oneWord)->get();
Dieser Ansatz filtert Ergebnisse basierend auf dem Vorhandensein aller drei Schlüsselwörter, nur der ersten beiden Schlüsselwörter und dann nur des ersten Schlüsselworts. Abschließend werden die Ergebnisse mit dem Union-Operator kombiniert.
Zusätzliche Überlegungen zur Paginierung
Um die Load-on-Scroll-Funktionalität zu implementieren, können Sie JavaScript- und AJAX-Anfragen integrieren. Wenn der Benutzer zum Ende der Seite scrollt, kann eine AJAX-Anfrage gesendet werden, um die nächsten Ergebnisse abzurufen. Die Methoden „skip()“ und „take()“ im Abfrage-Generator können verwendet werden, um den Offset und die Grenze der abzurufenden Datensätze anzugeben.
// Retrieve the specified number of results after the last loaded result $start = $request->get('start');//how many results have already been shown $records = Post::select('*') ->skip($start) ->take($this->rowperpage) // $this->rowperpage= 4 e.g. ->get();
Denken Sie daran, den Fall zu behandeln, in dem keine weiteren Ergebnisse zum Scrollen verfügbar sind.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine geordnete Relevanzsuche über mehrere Spalten in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!