Heim > Datenbank > MySQL-Tutorial > Wie implementiert man eine geordnete Relevanzsuche über mehrere Spalten in Laravel?

Wie implementiert man eine geordnete Relevanzsuche über mehrere Spalten in Laravel?

Mary-Kate Olsen
Freigeben: 2024-11-05 18:26:02
Original
826 Leute haben es durchsucht

How to Implement Ordered Relevance Search Across Multiple Columns in Laravel?

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage