web-development-kb-es.site

IU del cuadro de búsqueda: "todas las palabras", "coincidencia parcial", "frase exacta"

Estoy diseñando una aplicación de escritorio (cosas de contabilidad aburridas) y tengo una función de "producto de búsqueda".

Quiero tener un cuadro de búsqueda 'inteligente' agradable pero simple. Actualmente, el cuadro de búsqueda funciona dividiendo todas las palabras especificadas y buscando todos los registros que coinciden parcialmente con cualquiera de ellas.

Ahora me enfrento al siguiente dilema: Realmente quiero proporcionar una forma de especificar si el usuario desea hacer coincidir any o all las palabras especificadas. ¿Cuál sería un buen enfoque?

Otro problema es que tal vez un usuario quiere realizar una coincidencia exacta. Nuevamente, quiero que la aplicación sea fácil de usar.

Por el momento solo lancé tres botones de radio al formulario, pero me siento sucio por dentro ... ¿alguna opinión?

21
Leonardo Herrera

Google lo resolvió hace mucho tiempo: no sirve de nada reinventar la rueda. ;)

Le sugiero que elimine la necesidad de elegir y realice tres búsquedas al mismo tiempo: "frase exacta" , "coincide con todas las palabras" , AND "coincide con cualquiera" . Luego, una (SQL "union") esos resultados en ese orden y preséntelos al usuario.

inconvenientes:

  • más carga en su base de datos.

Positivos:

  • más natural para el usuario: si alguien ingresa varias palabras, lo más probable es que sepa lo que está buscando; no están disparando en la oscuridad tratando de acertar al menos una palabra
  • coincide con la experiencia en motores de búsqueda
  • ahorra un clic en la interacción = ahorra tiempo.

Asegúrese de eliminar las palabras ruidosas de la frase de búsqueda y normalizar casos/conjugaciones, etc .; ayudará a encontrar los resultados que necesitan sus usuarios, incluso si escriben las palabras de búsqueda en el caso incorrecto/tiempo/con el artículo incorrecto.

También asegúrese de que la búsqueda solo funcione con el teclado (es decir, sin obligar al usuario a usar el mouse. <search phrase> <Enter> debería ser suficiente para obtener resultados).

26
Erion

Mi opinión personal es que debe proporcionar una forma para que el usuario refine la búsqueda, porque:

  1. Lo declaró como su objetivo ("Realmente quiero ...") y no importa qué enfoque automático tome, no permitirá que el usuario elija.
  2. Gmail (que es una aplicación, más similar a su propia aplicación que la búsqueda web) le permite mostrar y refinar las opciones de búsqueda.
  3. Incluso la búsqueda normal en Google permite al usuario refinar los resultados manualmente, es decir, si la cadena de búsqueda está entre comillas, la buscará en su conjunto.
  4. Como usuario experimentado, si conozco mis criterios, tomar decisiones automáticas por mí y mezclar mis resultados de acuerdo con algún algoritmo que no conozco, realmente funciona en mi contra.

La forma en que sugeriría hacerlo es algo similar a lo que sugirió Chris.

Tomado de DeepDyvealt text

Una vez que presiona "refinar", puede abrir una lista desplegable de inmediato o incluso usar un pequeño cuadro de diálogo si en el futuro tiene la intención de agregar más opciones de búsqueda.

5
Dan Barak

Si el espacio es la principal preocupación, ¿ha pensado usar un menú desplegable? Si bien tal vez no sea una solución brillante (ya que requiere más clics), ocuparía menos espacio que un conjunto de botones de radio.

La opción actual aparecería con el expansor para permitir las otras opciones.

       +-----------------+---+ +---------------------+ +----+
Search | exact phrase    | V | |                     | | Go |
       +-----------------+---+ +---------------------+ +----+
       | all words           |
       | any words           |
       | exact phrase        |
       +---------------------+

(disculpa el mal arte ascii)

Un refinamiento podría ser realizar el menú desplegable cuando el mouse se desplaza sobre el expansor en lugar de que el usuario tenga que hacer clic, pero nuevamente no es una solución ideal.

4
ChrisF

Eliminaría las opciones de búsqueda: no creo que sea así como piensan los usuarios, pero, como dice el mantra de la interfaz de usuario, pruébelo con usuarios reales y vea lo que piensan.

Por lo general, los motores de búsqueda priorizan así:

  1. Intenta encontrar todo (el AND)
  2. Intenta encontrar la presencia de palabras individuales juntas
  3. Intenta encontrar fragmentos de las palabras (tallos: escribes 'patear' también coincide con 'patear')
2
Julian H

Definitivamente de acuerdo con Erion, no es necesario que el usuario elija ese tipo de cosas, haga que su motor de búsqueda (sea lo que sea) lo haga por usted.

No importa qué tecnología esté utilizando su back-end para la búsqueda, hay formas de priorizar los resultados de acuerdo con los criterios que desee (es decir, al igual que Google). Algunos pueden ser más difíciles de configurar que otros para este tipo de cosas, pero incluso una indexación de texto completo básica de SQL Server puede proporcionar este nivel de organización de resultados de búsqueda.

Simplemente tome la decisión de obtener la mejor experiencia de usuario y haga que sus ingenieros (o desarrolladores, si es necesario) lo hagan funcionar. Para eso están allí. Como también soy ingeniero, puedo decir que :)

1
Charles Boyung

Si tiene curiosidad, los motores de búsqueda de texto completo funcionan más comúnmente mediante el uso de la puntuación TD-IDF. Esto significa Término Frecuencia-Frecuencia de documento inversa . Lo esencial es que un documento es más relevante si el término de búsqueda aparece en él con mucha frecuencia, esto se descuenta por la cantidad de documentos en los que aparece la palabra en general.

0
CambridgeMike