Wie wandelt man natürliche Sprache in eine SQL-Abfrage um?Ungenaue Fuzzy-Abfragen.SQLf
Frage
Ich möchte eine Funktion implementieren, die es dem Benutzer ermöglicht, etwa Folgendes einzugeben:
"select * from products where low(price);"
was ist gleich:
"select * from products where (price >=0) And (price <= 50);"
Kennen Sie vielleicht Lösungen, die für mich nützlich sein könnten?Meine zweite Frage ist, wo in der Anwendungsstruktur soll ich sie umwandeln?Im Anwendungscode oder irgendwie in der Datenbank?
Meine App ist in C# geschrieben und stellt über ADO.NET eine Verbindung zu SQL Server 2008 her.
Für Hinweise, Pseudocode usw. wäre ich sehr dankbar.
Dank im Voraus !
Lösung
Mit SQL Server können Sie benutzerdefinierte Funktionen definieren (siehe zum Beispiel dieser Artikel).Wenn Sie eine Funktion definiert haben low
Dann wäre der erste Code, den Sie geschrieben haben, eine vollkommen gültige SQL-Abfrage, und Sie müssten überhaupt keine Vorverarbeitung durchführen.Die Erklärung würde ungefähr so aussehen:
CREATE FUNCTION low(@price)
RETURNS boolean AS
BEGIN
RETURN (@price >= 0) AND (@price <= 50)
END
Wenn Sie mehr Fuzzy-Sprache als nur Funktionsaufrufe zulassen möchten, wäre das ein weiteres (und deutlich komplizierteres) Problem.Mir ist keine Bibliothek bekannt, die das tut, und es könnte eine ziemliche Herausforderung sein, dies selbst zu implementieren.(Vielleicht möchten Sie weitere Beispiele hinzufügen, damit wir sehen können, was Sie meinen.)
Wenn Sie dem Benutzer erlauben, reine SQL-Abfragen zu schreiben, sollte der Benutzer natürlich jemand sein, dem Sie vertrauen können (da er problemlos alle Daten aus Ihrer Datenbank löschen kann).