Heim >Datenbank >MySQL-Tutorial >Wie implementiert man in Laravel eine Suchfunktion, die bei der Suche über mehrere Spalten mit mehreren Schlüsselwörtern die Relevanz priorisiert?
Laravel: Suche mit mehreren Schlüsselwörtern über mehrere Spalten hinweg mit nach Relevanz geordneten Ergebnissen
In Laravel wird eine Suchfunktion implementiert, die Daten basierend auf findet Mehrere Schlüsselwörter in mehreren Spalten können eine Herausforderung sein, insbesondere wenn es um die Reihenfolge der Relevanz geht. Dieser umfassende Leitfaden befasst sich ausführlich mit diesem Problem und bietet eine Lösung, die einem strukturierten Ansatz folgt.
Datenbankstruktur
Die Datenbanktabelle umfasst zwei Spalten: meta_name und meta_description, wobei Die Suchbegriffe werden abgeglichen.
Suchkriterien
Die Suche hat spezifische Kriterien und priorisiert die Ergebnisse basierend auf dem Vorhandensein von Schlüsselwörtern in beiden Spalten. Zeilen, die alle drei Schlüsselwörter enthalten, erhalten die höchste Priorität, gefolgt von Zeilen mit nur den ersten beiden Schlüsselwörtern und zuletzt Zeilen mit nur dem ersten Schlüsselwort.
Paginierung
Die Suchergebnisse werden mithilfe der Paginierung dynamisch geladen, wobei neue Ergebnisse angehängt werden, wenn der Benutzer zum Ende der Seite scrollt.
Quellcode
Der folgende Codeausschnitt wird abgerufen die Suchergebnisse in der gewünschten Reihenfolge:
<code class="php">$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'));</code>
Endabfrage
Um die Ergebnisse zu kombinieren, verwenden wir die UnionAll-Methode:
<code class="php">$posts = $all->unionAll($twoWords)->unionAll($oneWord)->get(); // check this first # or $posts = $all->unionAll($twoWords)->unionAll($oneWord)->skip($start)->take($this->rowperpage)->get();</code>
Dieser Code ruft die Ergebnisse in der angegebenen Reihenfolge ab und priorisiert dabei die Relevanz. Für die Paginierung werden die Methoden „skip()“ und „take()“ verwendet, wobei $start die Anzahl der bereits angezeigten Ergebnisse darstellt. Schließlich ruft die Methode get() die Datensätze ab.
Das obige ist der detaillierte Inhalt vonWie implementiert man in Laravel eine Suchfunktion, die bei der Suche über mehrere Spalten mit mehreren Schlüsselwörtern die Relevanz priorisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!