Pregunta

Estoy tratando de consultar la API de búsqueda de escritorio de Windows utilizando SQL.

Tengo que decir que realmente odio las ventanas 7 Búsqueda interfaz gráfica de usuario, por lo que decidí escribir mi propia. Tengo un montón de archivos indexados (aproximadamente 1.000.000), y quiero hacer una búsqueda de nombres. Algo así como: mostrar todos los nombres que contiene "conejito"

.

Pero aquí me encuentro con un problema de rendimiento. Buscar

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

es muy rápido. También la alternativa %egon. Pero %egon% toma siempre. No estoy seguro de si está en la naturaleza del índice (entiendo que aumentan enormemente las posibilidades) o si estoy haciendo algo mal.

La pregunta es:

  • ¿Es cierto que el índice de ventanas es sólo una gran base de datos SQL?
  • Si es así, ¿dónde puedo encontrar información exacta acerca de la estructura de la base de datos (claves principales, índices).

Si tengo que, básicamente, sólo su SQL optimización.

Alternativa pregunta:. ¿Alguien sabe una instrucción SQL rápida para encontrar todos los archivos con Egon en algún lugar del nombre

Editar: ¿Por qué no me gusta la interfaz gráfica de usuario de búsqueda

Bueno, es simplemente no es intuitiva, en comparación con XP. Si se deshabilita el perro y el uso de la vieja interfaz de XP, que podría crear una consulta de búsqueda como:

  
      
  • Todos los archivos mayores de 1 mes
  •   
  • más grande que 10 MB
  •   
  • patrón de nombre *_homework_*.docx
  •   

Trate esto en Windows 7 sin "aprender" la sintaxis. Y el infierno, yo no que desee aprender otra sintaxis sólo para encontrar un archivo.

El otro problema principal son tal vez mis hábitos de búsqueda. La mayoría de las veces de alguna manera saben el nombre del archivo (o partes) y simplemente quieren la ubicación. Y si se utiliza la búsqueda de esta manera se ejecutó en varias problema:

  • En primer lugar, siempre se tiene que prefijar con el nombre:
  • A continuación, el nombre de la carpeta diseño es estúpida (que está ordenando por carpeta principal, no ruta completa, I piensan , porque .. Tada ... véase el siguiente punto)
  • A continuación, aún más molesto, si usted tiene una lista de resultados e intenta clasificarlos, se necesita siempre

Y ahora realmente creo que mi sistema tiene un error. Traté de comprobar rápidamente que, buscó en alguna carpeta de tamaño promedio de "prueba" y se encontró con algunos archivos. Luego trató de ordenar las carpetas (para verificar mi segundo punto) y ahora está buscando simplemente para siempre ... Me refiero a realmente, mientras estoy escribiendo trata de encontrar la palabra "hola" ... oh, acabado - él encontrado aproximadamente 20 archivos. Así que, ahora, vamos a probar algo .... Ok, ahora parece que se ha recuperado .. Pero aún así, a reducir la velocidad para mi gusto ...

Así pues, suficiente maldición sobre la búsqueda de: -)

¿Fue útil?

Solución

Parece que están construyendo un índice en el nombre, por lo que puede utilizar el índice siempre y cuando se haya especificado el principio de la cadena, pero si no es así, tiene que usar un recorrido de tabla.

Si se asume que está utilizando el motor de búsqueda de texto completo de Microsoft, a continuación, tratar de usar algo como:
... DONDE system.filename CONTIENE 'Egon'

Hay básicamente dos opciones: que va a ser rechazada como no válido (es decir, esta interfaz SQL no admite su extensión de búsqueda F-T) o de lo que va a ser un poco más rápido

.

Edit: Vaya - la sintaxis debe ser "contiene (system.filename, 'Egon')". Lo sentimos que combate.

Otros consejos

Tal vez intente

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

Esto es lento, ya que son incapaces de utilizar un índice. La razón es que usted está en busca de un partido anwhere en la cadena en lugar de en el inicio de la cadena que significa que debe escanear toda la tabla de los contenidos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top