Heim  >  Artikel  >  Datenbank  >  Wie implementiert man eine relevante Suche in Laravel mit mehreren Schlüsselwörtern?

Wie implementiert man eine relevante Suche in Laravel mit mehreren Schlüsselwörtern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 06:43:01344Durchsuche

How to Implement a Relevant Search in Laravel with Multiple Keywords?

Laravel-Suche mit mehreren Schlüsselwörtern und Relevanzsortierung

Einführung

Dieser Artikel befasst sich mit einem häufigen Problem Herausforderung bei der Laravel-Entwicklung: Implementierung einer Suchfunktion, die mehrere Schlüsselwörter für mehrere Datenbankspalten einbezieht. Die Suchergebnisse müssen nach Relevanz geordnet werden, wobei das Vorhandensein und die Reihenfolge der angegebenen Schlüsselwörter zu berücksichtigen sind.

Problemstellung

Ein Benutzer versucht, eine Suchmaschine zu implementieren Laravel, bei dem mehrere Schlüsselwörter in eine Suchleiste eingegeben werden und die Ergebnisse in der Reihenfolge ihrer Relevanz angezeigt werden. Zwei spezifische Spalten, meta_name und meta_description, müssen abgefragt werden. Die Suchkriterien lauten wie folgt:

  • Zeilen, die alle drei Schlüsselwörter in beiden Spalten enthalten, sollten priorisiert werden.
  • Zeilen, die nur die ersten beiden Schlüsselwörter enthalten, sollten an zweiter Stelle stehen.
  • Zeilen, die nur das erste Schlüsselwort enthalten, sollten in eine Rangfolge gebracht werden drittens.

Lösung

Um diese Reihenfolge zu erreichen, werden drei separate Datenbankabfragen erstellt:

$all = DB::table('posts')
    ->where('meta_name', 'like', ... /* %word1% %word2% %word3% */)
    ->orWhere('meta_description', 'like', ... /* %word1% %word2% %word3% */);

$twoWords = DB::table('posts')
    ->where('meta_name', 'like', ... /* %word1% %word2% */)
    ->orWhere('meta_description', 'like', ... /* %word1% %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'));

Union und Reihenfolge

Abschließend werden die drei Ergebnismengen mit kombiniert Union:

$posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();

Dieser Prozess stellt sicher, dass Zeilen, die den angegebenen Kriterien entsprechen, in der gewünschten Relevanzreihenfolge abgerufen werden.

Paginierung und asynchrones Laden

Um die Load-on-Scroll-Paginierung zu implementieren, kann eine Skip-and-Take-Methode verwendet werden, um neue Ergebnisse anzuhängen, während der Benutzer scrollt. Wenn keine Daten mehr angezeigt werden können, kann eine Meldung zurückgegeben werden.

Fazit

Mit der bereitgestellten Lösung ruft die Suchfunktion relevante Ergebnisse basierend auf mehreren Schlüsselwörtern ab und ihre Reihenfolge des Erscheinens in den angegebenen Spalten. Die Ergebnisse werden im Load-on-Scroll-Verfahren angezeigt und sorgen so für ein nahtloses Benutzererlebnis.

Das obige ist der detaillierte Inhalt vonWie implementiert man eine relevante Suche in Laravel mit mehreren Schlüsselwörtern?. 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