Frage

Ich versuche, die Windows-Desktopsuche API mit SQL abgefragt werden.

Ich muss sagen, dass ich wirklich die Windows 7 Suche GUI HASSE, und so habe ich beschlossen, meine eigene zu schreiben. Ich habe eine Menge von Dateien indiziert (ca. 1.000.000), und ich möchte eine Suche nach Namen zu tun. Etwas wie:. Zeige mir alle Namen, die „Hase“ enthält

Aber hier ich laufe in ein Performance-Problem. Die Suche nach

SELECT "System.ItemPathDisplay" 
FROM "SystemIndex" 
WHERE System.FileName LIKE 'egon%'

ist wirklich schnell. Auch die %egon Alternative. Aber %egon% dauert ewig. Ich bin nicht sicher, ob es in der Natur des Index (Ich verstehe, dass die Möglichkeiten enorm steigern) oder wenn ich etwas falsch mache.

Die Frage ist:

  • Ist es richtig, dass der Windows-Index nur eine große SQL-Datenbank ist?
  • Wenn ja, wo kann ich genaue Informationen über die Struktur der DB (Primärschlüssel, Indizes) zu finden.

Wenn ich, dass sein im Grunde nur die Optimierung von SQL.

Alternative Frage: weiß Hat jemand eine schnelle SQL-Anweisung alle Dateien zu finden, mit egon irgendwo im Namen

.

Edit: Warum ich nicht wie die Suche GUI

Nun, es ist einfach nicht intuitiv, im Vergleich zu XP. Wenn Sie den Hund und verwenden Sie die alte XP-Schnittstelle zu deaktivieren, könnte ich eine Suchanfrage wie erstellen:

  
      
  • Alle Dateien, die älter als 1 Monat
  •   
  • größer als 10 MB
  •   
  • Namensmuster *_homework_*.docx
  •   

Versuchen Sie dies in Windows 7 ohne "Lernen" die Syntax. Und die Hölle, ich nicht wollen einfach nur eine andere Syntax lernen eine Datei zu finden.

Das andere Hauptproblem sind vielleicht meine Suchgewohnheiten. Die meiste Zeit weiß ich irgendwie den Dateinamen (oder Teile) und wollen einfach den Standort. Und wenn Sie die nutzen diese Art und Weise suchen Sie in mehrere Probleme lauteten:

  • Zu allererst Sie immer Präfix müssen es mit dem Namen:
  • Dann wird der Ordnername Layout dumm ist (es ist Ordnung von übergeordneten Ordnern, nicht vollständiger Pfad, I denkt , weil .. tada ... siehe nächsten Punkt)
  • Dann noch ärgerlicher, wenn Sie eine Liste der Ergebnisse haben, und Sie versuchen, sie zu sortieren, es dauert ewig

Und jetzt wirklich, dass mein System, das ich hat einen Bug. Ich habe versucht, schnell, es zu überprüfen, in einem gewissen durchschnittlichen Größe Ordnern für „Test“ durchsucht und er fand einige Dateien. Dann habe ich versucht, sie für Ordner zu sortieren (meinen zweiten Punkt, um zu überprüfen) und jetzt ist er nur die Suche für immer ... ich meine wirklich, während ich tippe er versucht, das Wort „Hallo“ zu finden ... oh, fertig - er ca. 20 Dateien gefunden. So, jetzt, können versuchen, etwas .... Ok, jetzt scheint es, als hätte er hat sich erholt .. Aber nach wie vor, für meinen Geschmack langsam ...

So, genug Fluchen über bisherige Auswahl: -)

War es hilfreich?

Lösung

Es sieht aus wie sie einen Index auf dem Namen Gebäude sind, so dass es den Index so lange verwenden kann, wie Sie den Anfang der Zeichenfolge angegeben hat, aber wenn Sie nicht haben, hat es eine Tabelle-Scan zu verwenden.

Unter der Annahme, sie sind mit Microsofts Volltext-Suchmaschine, versuchen Sie dann, wie etwas mit:
... WHERE system.filename ENTHÄLT 'egon'

Es gibt grundsätzlich zwei Möglichkeiten: es als ungültig zurückgewiesen werden (das heißt diese SQL-Schnittstelle nicht unterstützt ihre F-T Sucherweiterung) oder sonst wird es sein, ein gutes Stück schneller

.

EDIT: Oops - die Syntax sollte "enthält (system.filename 'egon')". Es tut uns Leid ‚bout das.

Andere Tipps

Vielleicht versuchen

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";

Dies ist langsam, da Sie nicht in der Lage sind, einen Index zu verwenden. Der Grund dafür ist, dass Sie für ein Spiel anwhere im String suchen, anstatt zu Beginn der Zeichenfolge, die bedeuten, dass Sie die gesamte Tabelle für den Inhalt scannen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top