Laravel: Suche nach mehreren Schlüsselwörtern in mehreren Spalten mit relevanzbasierter Reihenfolge
Implementierung einer Suche in Laravel, die mehrere Schlüsselwörter in mehreren Spalten berücksichtigt Dabei kann es eine Herausforderung sein, die Relevanz aufrechtzuerhalten. Dieser Artikel befasst sich mit einem solchen Problem, bei dem die Suchergebnisse basierend auf der Häufigkeit des Vorkommens der Schlüsselwörter in den angegebenen Spalten sortiert werden.
Szenario:
Die Suchleiste erfordert drei Schlüsselwörter als Eingabe und das Suchkriterium lautet:
Datenbankabfrage:
Um das gewünschte Ergebnis zu erzielen, sollte die Datenbankabfrage mehrere ODER-Bedingungen kombinieren und verwenden Sie die Funktion „whereNotIn“, um Zeilen auszuschließen, die bereits in vorherigen Bedingungen abgerufen wurden.
<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>
Vereinigung und Reihenfolge:
Schließlich die $all, $twoWords , und $oneWord-Ergebnisse werden mithilfe der Union-Funktion zusammengeführt, um die geordneten Suchergebnisse zu erhalten.
<code class="php">$posts = $all->union($twoWords)->union($oneWord)->get(); // check this first # or $posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();</code>
Dieser Ansatz stellt dies sicher Die Suchergebnisse werden gemäß den angegebenen Kriterien sortiert, beginnend mit Zeilen, die alle drei Schlüsselwörter in den angegebenen Spalten enthalten.
Das obige ist der detaillierte Inhalt vonWie suche ich in Laravel nach mehreren Schlüsselwörtern über mehrere Spalten hinweg mit relevanzbasierter Sortierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!