2017-12-10 2 views
0

Ich habe eine Tabelle mit Id und Text Felder. Das Feld Text enthält Sätze mit durchschnittlich 50 Wörtern. Es gibt> 1.000.000 Zeilen.Ist das Sortieren der Datenbank über eine benutzerdefinierte Funktion ineffizient?

Dies ist Teil einer Webanwendung, in der Benutzer in der Lage sein müssen, diese Sätze zu durchsuchen. Hier ist der Unterschied - Ich muss in der Lage sein, eine benutzerdefinierte Suchfunktion in C# geschrieben, die Machine Learning stattdessen verwendet.

Von dem, was ich verstehe, bedeutet dies Ich muss die gesamte Datenbank von> 1.000.000 Zeilen jedes Mal herunterladen, wenn ein Benutzer eine Suche macht! Das scheint mir wirklich ineffizient zu sein.

Wie würden Sie dies auf möglichst effiziente Weise umsetzen?

Wenn dies relevant ist, ich bin mit EF-Core mit LINQ .Where(my_custom_search_function), mit einer PostgreSQL-Datenbank

+0

Fragen Sie nach Sortieren? oder über C# suchen? –

+0

Beide. Meine Suchfunktion ist grundsätzlich eine Funktion, die 2 Elemente akzeptiert und vergleicht. Ich lade gerade alle Zeilen herunter und sortiere sie mit dieser Funktion und gebe dann die Top 5 zurück. Es ist mir egal, ob die Antwort C# -spezifisch ist, vielleicht gibt es eine Lösung, die nur SQL/die Datenbank beinhaltet? – Biarity

+2

haben Sie in Betracht gezogen ["Volltextsuche"] (https://www.postgresql.org/docs/current/static/textsearch.html) ein Blog: [Postgres Volltextsuche ist gut genug!] (Http://rachbelaid.com/postgres-full-text-search-is-good-enough/) –

Antwort

0

Ich glaube, ich die Lösung gefunden habe. Die Postgresql-Volltextsuche bietet derzeit two ranking functions. In diesem Fall beziehen sich "Sortieren" in der Frage und "Rangieren" hier auf dasselbe.

Postgresql docs Zustand:

jedoch das Konzept der Relevanz ist vage und sehr anwendungsspezifisch. Unterschiedliche Anwendungen können zusätzliche Informationen für das Ranking erfordern, z. B. die Dokumentänderungszeit. Die integrierten Ranking-Funktionen sind nur Beispiele. Sie können Ihre eigenen Ranking-Funktionen schreiben und/oder ihre Ergebnisse mit zusätzlichen Faktoren kombinieren, um Ihre spezifischen Anforderungen zu erfüllen.

Diese Funktionen können alle four kinds of supported postgresql functions.

Dann antworten sie genau diese Frage:

Das Ranking kann teuer sein, da es die tsvector jedes passenden Dokument erfordert Beratung, die I/O langsam gebunden und daher sein kann. Leider ist es fast unmöglich, zu vermeiden, da praktische Abfragen oft zu einer großen Anzahl von Übereinstimmungen führen.

Dank an @Used_By_Already, um mich auf Postgresql Volltextsuche zu verweisen.

Verwandte Themen