Heim  >  Artikel  >  Datenbank  >  Wie suche ich in Laravel nach mehreren Schlüsselwörtern über mehrere Spalten hinweg mit relevanzbasierter Sortierung?

Wie suche ich in Laravel nach mehreren Schlüsselwörtern über mehrere Spalten hinweg mit relevanzbasierter Sortierung?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 14:09:02611Durchsuche

How to Search for Multiple Keywords Across Multiple Columns with Relevance-Based Ordering in Laravel?

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:

  1. Zeilen, die alle drei Schlüsselwörter in beiden Spalten enthalten (meta_name und meta_description) stehen an erster Stelle.
  2. Zeilen, die nur die ersten beiden Schlüsselwörter in den genannten Spalten enthalten, stehen an zweiter Stelle.
  3. Zeilen, die nur das erste Schlüsselwort in den genannten Spalten enthalten, stehen an dritter Stelle.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn