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
Mary-Kate OlsenOriginal
2024-11-05 18:26:02816Durchsuche

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();

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();

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!

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