none
Tags para busqueda RRS feed

  • Pregunta

  • Hola, quisiera implementar un modulo de tags en mi aplicación, como he comentado antes, se trata de una app dedicada a la publicación de anuncios de todo tipo, como venta de autos, alquiler de departamentos, venta de animales domésticos, venta de aviones, requerimiento de personal de trabajo, oferta de servicios y todo lo que uno se pueda imaginar. Quisiera que el usuario al momento de crear su anuncio, introduzca los tags que crea necesario para ayudar a que su anuncio se encuentre de forma facil en el buscador, con palabras clave que el considere importantes, por ejemplo si se trata de un anuncio de venta de un auto, el usuario debería ingresar las palabras como: porche, 2011, amarillo, dos puertas,, asi el interesado que busca, de forma intuitiva ingresaría al buscador datos como: auto porche a la venta modelo 2011 y el anuncio deberia ser encontrado, o los anuncios que coincidan en cierto grado de relevancia con los parámetros ingresados el buscador. Quisiera el sistema de tags para facilitar las búsquedas, tambien desarrollare mi propio buscador, entonces quisiera conocer bien este mecanismo de los tags. Alguien tendrá algun ejemplo o algun link que me guié en esto? desde el diseño de la bd, es decir las tablas que debo adicionar a mi BD, hasta la gestion de los tags, como utilizarlos y como mostrarlos al usuario?. Estaré atento a sus consejos. Saludos cordiales
    • Tipo cambiado Richof martes, 31 de mayo de 2011 1:54
    lunes, 30 de mayo de 2011 23:58

Respuestas

  • Realmente no hay ninguna diferencia desde el punto de vista de MVC2 entre que se use en el lado de la base de datos el full-text search, o que se busque con sentencias convencionales usando "... where campo like valor". Sólo cambiará la sintaxis de la sentencia SQL, pero al MVC le da lo mismo que se use una sentencia o la otra. El modelo contendrá los datos resultantes de la búsqueda (con independencia de que la sentencia que los busca use full text search o no). El controlador tendrá un método de acción para buscar que recibirá como argumento los términos a buscar, y luego llamará a la capa de datos para que ejecute la sentencia de búsqueda (y le da igual que esa sentencia use o no full-text search). Y la Vista presentará los resultados de la búsqueda tomándolos del modelo, por lo que le da igual que provengan o no de un full-text search. Así pues, la única diferencia entre usar o no full-text search está dentro de la capa de datos, y no afecta para nada a MVC.

     

    • Propuesto como respuesta eduard tomàsMVP miércoles, 27 de julio de 2011 6:22
    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:00
    martes, 26 de julio de 2011 18:10
  • No, en LINQ no hay soporte directo para full-text search. El Contains de Linq (que en realidad es el Contains de la clase String, procesado a través del árbol de expresiones de la Lambda del Where) no genera un Contains de SQL Server, sino un "LIKE %valor%". Podrías crear un procedimiento almacenado que haga la búsqueda de full-text, y luego añadir el procedimiento almacenado en el diseñador de LINQ.

     

    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:00
    jueves, 28 de julio de 2011 8:05

Todas las respuestas

  • ¿Vas a usar SQL Server como motor de base de datos? Si es así, te sugiero usar el FULL TEXT SEARCH de SQl Server. Mete simplemente todos los tags en un campo de texto en la base de datos, añadele a ese campo un índice para el full-text search, y a la hora de usar el buscador aplica una query con uno de los predicados de búsqueda en texto completo (tal como el CONTAINS). El mecanismo de búsqueda del servidor ya es capaz de buscarte distintos números de coincidencias. aplicar distintos pesos a las distintas palabras si así se lo indicas en la condición de búsqueda, clasificar los resultados según el "rango" de aciertos en las palabras, aplicar variaciones gramaticales de las mismas, etc.

     

    martes, 31 de mayo de 2011 5:50
  • Hola gracias por responder, he revisado un poco el FULL TEXT SEARCH de SQL y creo que seria lo ideal para realizar las busquedas, mi consulta ahora es tomando en cuenta que este mecanismo puede manejar campos con grandes cantidades de texto, sera necesario usar los tags?, es decir entendi que el procedimiento para usar el FULL TEXT SERACH es indexar ciertas columnas de una tabla, en mi caso tengo la tabla Anuncios( IDAnuncio, Titulo, Descripcion, ...), entonces a mi criterio los datos relevantes estan en dos columnas, "Titulo" y "Descripcion", entoncs si indexo estas dos columnas, el FULL TEXT SEARCH encontrara los anuncios que se esperan?, alguien conoce algun link donde pueda investigar mas de este tema?.

    Saludos cordiales

     

     


    martes, 31 de mayo de 2011 17:10
  • Exacto, si indexas las columnas título y descripción y haces un select que busque en esas dos columnas usando el CONTAINS, encontrarás cualquier registro que contenga las palabras buscadas. Si además de ello quieres permitir que el usuario introduzca Tags, puedes recurrir al truco de añadir otro campo más con los Tags, que los concatene separados por espacios, y hacer una búsqueda full-text sobre este último campo.

     

    martes, 31 de mayo de 2011 19:12
  • Bien, sera que alguien conoce algun tutorial para implementar un mecanismo de busquedas en MVC2 con fulltextsearch?, como va el modelo, el controlador y la vista?.

    Slaudos cordiales

    martes, 26 de julio de 2011 17:38
  • Realmente no hay ninguna diferencia desde el punto de vista de MVC2 entre que se use en el lado de la base de datos el full-text search, o que se busque con sentencias convencionales usando "... where campo like valor". Sólo cambiará la sintaxis de la sentencia SQL, pero al MVC le da lo mismo que se use una sentencia o la otra. El modelo contendrá los datos resultantes de la búsqueda (con independencia de que la sentencia que los busca use full text search o no). El controlador tendrá un método de acción para buscar que recibirá como argumento los términos a buscar, y luego llamará a la capa de datos para que ejecute la sentencia de búsqueda (y le da igual que esa sentencia use o no full-text search). Y la Vista presentará los resultados de la búsqueda tomándolos del modelo, por lo que le da igual que provengan o no de un full-text search. Así pues, la única diferencia entre usar o no full-text search está dentro de la capa de datos, y no afecta para nada a MVC.

     

    • Propuesto como respuesta eduard tomàsMVP miércoles, 27 de julio de 2011 6:22
    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:00
    martes, 26 de julio de 2011 18:10
  • Estimado, estoy intentando aplicar el fulltextsearch en linq, a primera vista no encuentro like ni freetext, pero si encontre Contains,el problema es los resultados de la busqueda con contains es que la busqueda es demasiado precisa y yo necesito algo mas flexible, quisiera probar con freetext  pero al parecer no tiene soporte en linq, ademas tambien quisiera probar ese procedimeinto de indexar las columnas y aplicar pesos a los parametros de busqueda, si alguien conoce algun tutorial o algo que me pueda ayudar estare muy agradecido

    Saludos


    miércoles, 27 de julio de 2011 20:40
  • No, en LINQ no hay soporte directo para full-text search. El Contains de Linq (que en realidad es el Contains de la clase String, procesado a través del árbol de expresiones de la Lambda del Where) no genera un Contains de SQL Server, sino un "LIKE %valor%". Podrías crear un procedimiento almacenado que haga la búsqueda de full-text, y luego añadir el procedimiento almacenado en el diseñador de LINQ.

     

    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:00
    jueves, 28 de julio de 2011 8:05