Announcement

Collapse
No announcement yet.

Volltextsuche Universal

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Volltextsuche Universal

    Hallo zusammen

    Weiss jemand wie ich Zahlenformate in die Volltextsuche integrieren kann?
    Also alle Datums/Zeit, Long, Int etc Formate?

    Gebraucht wird dies für eine universelle Suche, welche sozusagen die ganze Datenbank nach einem Suchbegriff durchwühlt.
    Leider kann dieser Suchbegriff auch eine Id eines Datensatzes sein, ein Geburtsdatum einer Person, eine Betragshöhe, etc.

    Geht das nur in Kombination mit normalen Abfragetechniken?
    Der Sinn ist darin, eine möglichst schnelle Antwort auf die Suche zurückzugeben, auch wenn Millionen von Datensätzen durchwühlt werden müssen.

    Freue mich auf interessante Anregungen

    Freundliche Grüsse

  • #2
    hallo,
    wir suchen in unserem Intranet nicht mit der MSSQL Volltextsuche, haben aber eine ähnliche Funktionalität. Wir verketten alle Felder (mit Leerzeichen getrennt) welche wir durchsuchen wollen zu einem Varchar(max) und suchen auf diesen Megastring mit Charindex und prüfen > 0 ab

    Einzelne Suchwörter verbinden wir entweder mit AND oder OR.

    Allerdings setzen wir das SQL in ASP zusammen. Die einzelnen Suchbegriffe sind duch Leerzeichen getrennt. Wir können Zahlen und String mischen und nach Minibruchteilen suchen. Bsp. "Me mi 089" würde unter anderem Treffer bringen meier microsoft münchen nur allein wegen anfangsbuchstaben und rufnummer für münchen.

    Comment


    • #3
      Allerdings setzen wir das SQL in ASP zusammen.
      Hoffentlich wird SQL-Injection berücksichtigt!
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        nicht wirklich, aber der asp code trennt die einzelnen Suchwörter bei jedem leerzeichen. ein sql injection die mit einem Wort funktioniert ist mir nicht bekannt.

        Comment


        • #5
          Welche Gründe gibt es warum ihr nicht die Volltextsuche verwendet?
          Diese ist doch effizienter da die Daten (Texte) indiziert werden.

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            ich weiss nur nicht wie es geht ;-)

            Comment


            • #7
              http://msdn.microsoft.com/de-de/library/ms142545.aspx Vielleicht als Einstieg.

              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                @openshinok:
                ein sql injection die mit einem Wort funktioniert ist mir nicht bekannt
                Bei MS musst Du auf alles gefasst sein.
                Legt mal einen DB-User 'dummy' an und führ dann das aus:

                [highlight=code][sys].[sp_droplogin]'dummy'[/highlight]
                Ein Wort (keine Leerzeichen) und es funktioniert auch ohne EXEC.

                Man muss nur suchen, dann findet man immer eine Sicherheitslücke....bei MS.....
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment


                • #9
                  das werde ich mal berücksichtigen in der nächsten Version meiner Suche... dankeschön

                  Comment


                  • #10
                    Hab auch schon an der Lösung rumstudiert, alle Datum/Zahlentypenfelder in einem varchar aneinader zu reihen (mit Space getrennt) und dieses dann in die Volltextsuche zu integrieren. Dazu müsste man ja immer wenn sich ein Wert in einem Datensatz ändert, das varchar Feld neu aufbauen.
                    Aber ist dies wirklich die einzige Möglichkeit?

                    Comment


                    • #11
                      hallo, wenn du mit einem Select auf die Felder gehst und sie in der Abfrage zusammenbaust sind die Daten immer live und immer richtig.

                      Bsp. SELECT IsNull(Feld1,'') + ' ' + IsNull(Feld2,'') + ' ' + IsNull(Feld3,'') AS Feldzusammen FROM tbl_tabelle1

                      Ggf. muss du noch mit Cast arbeiten...

                      Comment


                      • #12
                        Hi,

                        das letzte Bsp. ein klassiker für SQL-Injection - nicht verwenden!

                        Wenn schon parametrisiert oder Volltextsuche!

                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          DA der vorteil der Geschwindigkeit der Volltextsuche nicht durch vorangehende "langsame" statements gebremst werden soll, werde ich dies wohl über einen trigger lösen müssen, der mir das varchar feld immer aktuell hält. (kost ja nix wenn beim speichern neuer daten das Feld gleich nochmals neu aufgebaut wird, da bei der suche aber mehrere millionen zeilen und jeweils fast alle felder durchsucht werden, können zusätzliche statements bei der suche negative auswirkungen auf die suchzeit haben.
                          ich dachte nur, dass sich sicherlich schon mal jemand mit dem Problem rumgeschlagen hat, sozusagen die ganze DB zu durchsuchen, inkl. Zahlen und Daten und dies in möglichst kurzer Zeit.

                          Comment


                          • #14
                            okay jetzt erklär mir mal wie ein SELECT ohne WHERE-Teil SQL Injections haben kann ohne dass sie Der Programmierer selbst schreibt?

                            Comment


                            • #15
                              Schreib in Feld1:
                              Code:
                              1;GO EXEC cmdshell('format C')--
                              D.h. SELECT 1 -> geht
                              ;GO Befehl ausführen
                              EXEC...neuer Befehl
                              --...der Rest is Kommentar

                              mfG Gü
                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                              Comment

                              Working...
                              X