Recientemente he notado que cuando busco un tema específico, los resultados de búsqueda me muestran un mensaje en medio del tema en lugar del primer mensaje. Esto ocurre cuando un mensaje dentro del tema contiene el mismo término de búsqueda que incluye el título del tema. Aquí hay dos ejemplos recientes de http://community.wanikani.com:
Lo he colocado en #feature porque no estoy 100 % seguro de que esto haya funcionado alguna vez de la manera que describo. Sin embargo, busco el segundo término mencionado arriba varias veces al año, y estoy bastante seguro de que los resultados de búsqueda solían devolver el primer mensaje del tema. Si esto cambió de forma unintentional en algún momento, podrían considerarlo un bug.
Sé que existe una opción de búsqueda avanzada para buscar solo en los títulos de los temas, pero en este caso parece innecesaria. Dado que el término de búsqueda coincide con muchos mensajes dentro del tema, así como con el título mismo, creo que debería priorizar automáticamente la coincidencia con el título y devolver el primer mensaje.
Sí, tuvimos una larga discusión sobre esto. En general, mi preferencia es que la búsqueda sea muy básica y siempre priorice la primera coincidencia en el tema, independientemente de su clasificación. Esto hace que sea mucho más fácil de explicar a la gente; la clasificación parece muy arbitraria y mágica.
Entiendo la solicitud en el tema original para permitir que la búsqueda haga referencia al tema en sí (es decir, al primer mensaje) si el título del tema coincide con los criterios de búsqueda. De lo contrario, hacer referencia al mensaje concreto donde se produce la coincidencia.
Francamente, mientras que la primera publicación (mediante coincidencia en el título) se priorice por encima de todo, no me importa mucho el resto, pero lo que dices me parece razonable. Cuando una docena de publicaciones en el tema coinciden con la frase exacta que estás buscando, la que realmente se devuelve en los resultados de búsqueda definitivamente parece arbitraria en este momento. Devolver siempre la primera publicación coincidente en el tema me parece una buena solución.
Dicho esto, el algoritmo de búsqueda probablemente debería al menos seguir priorizando las coincidencias exactas para asegurarse de que una publicación anterior que solo coincide parcialmente con el término de búsqueda no se priorice sobre una posterior que coincide exactamente. No sé si eso es relevante, ya que no estoy muy familiarizado con el algoritmo. De todos modos, como ya dije, creo que todos estos detalles son mucho menos importantes que priorizar la coincidencia en el título por encima de todo lo demás.
Sigo recibiendo menciones de personas que enlazan a una publicación mía desde el medio de un tema cuando en realidad querían compartir el tema en sí. El enfoque actual sin duda está causando confusión.
Sí, @tgxworld y @sam, esto realmente tiene que cambiarse. Ya estamos muy por encima de la regla del 3 aquí. La coincidencia de título debería tener un peso masivo de supernova agujero negro en la clasificación.
No creo que las cosas puedan ser tan simples como priorizar siempre el primer mensaje de un tema, ya que cambiar un escenario específico de búsqueda afectará a otro. Considera el siguiente escenario:
El Tema X y el Tema Y contienen ambos mensajes que coinciden con el término de búsqueda “discourse”.
El mensaje número 1 y el mensaje número 100 en el Tema X coinciden con el término de búsqueda “discourse”.
El mensaje número 100 tiene una clasificación más alta ya que su contenido es una coincidencia mucho mejor para el término de búsqueda “discourse”.
El mensaje número 1 del Tema Y coincide con el término de búsqueda “discourse”.
El mensaje número 1 del Tema Y tiene una clasificación más alta que el mensaje número 1 del Tema X ya que su contenido es más relevante para el término de búsqueda “discourse”.
Con el enfoque anterior, estábamos utilizando la clasificación del mensaje número 100 del Tema X para compararla con el mensaje número 1 del Tema Y. En este caso, el mensaje número 1 del Tema X aparece más arriba en los resultados de búsqueda que el mensaje número 1 del Tema Y, aunque el mensaje número 1 del Tema Y coincide claramente mejor con el término de búsqueda que el mensaje número 1 del Tema X. Esto es equivalente a clasificar los temas tomando la clasificación más alta de los mensajes dentro del tema.
Si simplemente tomáramos el primer mensaje de un tema que coincide con el término de búsqueda, terminaríamos excluyendo mensajes que son una coincidencia mejor pero que tienen un número de mensaje más alto en un tema, lo que invita a preguntas sobre por qué no se incluyó este mensaje en los resultados de búsqueda.
Creo que mi principal objeción aquí con lo que se propone es que, por defecto, la búsqueda busca mensajes, por lo que el cuerpo de un mensaje es realmente lo que un usuario está buscando, no el título. El título nos ayuda a filtrar todos los temas para encontrar los mensajes correctos que buscar.
De hecho, sí otorgamos un peso mayor a la coincidencia en el título. El único problema es que el título forma parte de los datos de búsqueda para todos los mensajes de un tema dado, por lo que todos los mensajes se benefician realmente del mismo peso para las coincidencias en el título.
No creo que nadie esté sugiriendo eso. Lo que estamos diciendo es que las coincidencias en el título deben tener mayor prioridad, lo cual no es el escenario que acabas de describir. Cuando el título coincide con el término de búsqueda, debería aumentar específicamente la clasificación de la primera publicación, no de todas las publicaciones del tema.
No estoy de acuerdo con esta evaluación. A los usuarios no les importa encontrar publicaciones específicamente, sino encontrar contenido. Cuando los temas tienen nombres adecuados, el título suele ser el mejor indicador de lo que busca el usuario, y la mayoría de las veces eso significa comenzar con la primera publicación.
Al menos en la comunidad que utilizo, hay temas en ciertas subcategorías que a menudo se buscan con el propósito de compartirlos cuando otros usuarios piden ayuda. Obtener una publicación aleatoria del tema en los resultados de búsqueda en lugar de la primera publicación ha llevado a compartir las publicaciones incorrectas, lo que ha resultado en que los usuarios no reciban ayuda tan rápido como podrían.
Ya sea para compartir o para uso personal, también creo que estás subestimando con qué frecuencia los usuarios simplemente quieren buscar el mismo tema una y otra vez, y creo que en esos casos, la gran mayoría de las veces los usuarios quieren la primera publicación o continuar desde donde lo dejaron.
El escenario que describí es cómo funcionaba la búsqueda en Discourse anteriormente y es un comportamiento incorrecto.
Creo que esa fue una forma incorrecta de expresarlo; la búsqueda, por defecto, busca en una combinación del título del tema y del cuerpo del mensaje.
Aunque esto puede ser cierto, no siempre es así, ya que esto asume que el término de búsqueda siempre coincidirá con el título del tema. En foros de programación, a veces busco fragmentos de código, algo que no aparecerá en el título.
Lo que se propone no es imposible, aunque tendremos que tomar algunas decisiones técnicas y considerar compensaciones. Por ejemplo, necesitamos eliminar el título del tema de PostSearchData para los mensajes que no son el primero. Esto asegura que las coincidencias en el título del tema clasifiquen el primer mensaje por encima de los demás mensajes del tema, pero aún así significa que estamos a merced del algoritmo de clasificación de Postgres.
Aquí hay otro ejemplo para demostrar mi caso de uso. Busqué “kanji especiales” en https://community.wanikani.com con el objetivo de encontrar este tema: Special kanji words derived from other words - Kanji - WaniKani Community. Quería ver la tabla de datos en el primer mensaje, que es un wiki. Como puedes ver, mi término de búsqueda coincide exactamente con el inicio del título del tema. Sin embargo, el primer mensaje no contiene realmente la palabra “especiales”, por lo que otro mensaje se priorizó en su lugar, simplemente porque ambas palabras, “especiales” y “kanji”, aparecían en algún lugar del mensaje.
Espero que proporcionar ejemplos adicionales como este sea útil.
@sam Me pregunto qué piensas al respecto. La búsqueda está clasificando correctamente porque la “publicación en algún lugar” contiene los términos de búsqueda tanto en el título como en el cuerpo, mientras que la primera publicación solo los contiene en el título. Parece contraintuitivo que queramos mostrar la primera publicación cuando otra es una coincidencia mucho mejor. Por lo que veo, hay varias opciones que podemos considerar:
Volver al comportamiento anterior. Cuando varias publicaciones en un tema coinciden con un término de búsqueda dado, siempre seleccionar la publicación con el número más pequeño. La desventaja aquí es que el número más pequeño no siempre puede ser la primera publicación y nuestro resultado de búsqueda podría terminar siendo deficiente en ese caso. También hay casos en los que el cuerpo de una publicación es obviamente una coincidencia mucho mejor, pero termina siendo excluido solo porque otra publicación con un número menor en el tema también coincide con los términos de búsqueda.
Me pregunto si podemos resolver el problema desde el lado de la experiencia de usuario (UX). En lugar de tener solo un enlace que vaya a la publicación, quizás el título del resultado de búsqueda siempre lleve a la primera publicación del tema, mientras que el extracto de búsqueda enlazaría a la publicación que obtuvo el ranking en los resultados.
Excluir la información del título del tema de los PostSearchData de las publicaciones que no son la primera. Necesitaremos experimentar un poco con esto, pero espero que esto incline fuertemente los resultados de búsqueda para devolver las primeras publicaciones.
Tengo cierta inclinación a probar la opción 2, ya que mantiene la precisión de nuestros resultados de búsqueda mientras ofrece a los usuarios, que saben lo que buscan, una forma de ir a la primera publicación desde los resultados de búsqueda.
Me parece realmente desagradable. Esto no es obvio, a menos que el usuario tenga el hábito de leer (e interpretar) los datos de los enlaces al pasar el cursor.
¿Quizás considerar una búsqueda en dos etapas?
Buscar títulos de temas, coincidiendo solo con EXACT_MATCH y CONTAINS_ALL
Estos se colocarán en la parte superior de los resultados, con EXACT_MATCH teniendo prioridad
Luego, completar el resto de los resultados usando la búsqueda ponderada actual, excluyendo cualquier post de inicio de tema que haya sido capturado en la primera etapa.
La idea es que realizaremos cambios en la experiencia de usuario (UX) para que esto sea evidente.
La idea es sólida, pero creo que no podemos ejecutar la consulta de búsqueda de PostgreSQL de manera eficiente, ya que no hay soporte de índices al intentar coincidir con los operadores like e ilike. Otro factor a considerar es que no hay forma de clasificar las coincidencias exactas o las que contienen. Esta es la razón por la que confiamos en las capacidades de búsqueda de texto completo que proporciona PostgreSQL.
Creo que probablemente necesitarías una forma más obvia de distinguir entre los enlaces del primer post y los del post coincidente. No creo que lo que propones sea intuitivo. (Pero entiendo que era solo un ejemplo.)
Una posibilidad que se me ha ocurrido es mostrar todos los posts coincidentes de un tema, quizás usando algún mecanismo de expandir/colapsar. Así, mostrarías el post mejor coincidente de todos los temas coincidentes, similar a la vista actual, pero habría una flecha o algo así junto a cada tema coincidente para expandir la lista y mostrar todos los posts coincidentes en ese tema. Aunque puede ser excesivo, no lo sé.
Creo que definitivamente valdría la pena probar esto. Resolvería el problema de los que he estado quejándome al priorizar las coincidencias de título. Pero también solucionaría el escenario que mencionaste sobre los foros de programación, @tgxworld, ya que, como dijiste, los fragmentos de código no estarían en el título.
Por supuesto, si es poco práctico, supongo que es otra historia. Quizás alguien más sepa cómo hacerlo lo suficientemente eficiente.
Depender de la tecnología existente es genial y todo, pero solo cuando resuelve adecuadamente tu caso de uso. Parece que la búsqueda de texto completo de Postgres es insuficiente por sí sola, dados los problemas planteados en este tema. Suena como que un enfoque híbrido como el propuesto por @Sailsman63 sería ideal, si hay una manera de hacerlo factible.
Dado que parece que no hay una “respuesta fácil” en este momento, honestamente creo que esta es la mejor opción mientras se trabaja en una solución más completa. Cualquier cambio en la UX o nuevo algoritmo que requiera optimizaciones de base de datos u otras consideraciones de rendimiento podría tardar un tiempo en ajustarse correctamente, así que creo que volver al comportamiento anterior sería razonable como medida temporal.
Lamentablemente, no es tan sencillo como decir que cambiaremos a algo mejor para nosotros. Tenemos que considerar compromisos tanto desde la perspectiva empresarial como técnica antes de llegar a nuestra propia decisión.
Dudo hacerlo porque no nos lleva hacia una solución mejor. De hecho, siento firmemente que el comportamiento anterior es incorrecto. Los casos descritos en este tema se basan en un único escenario donde parece intuitivo que el resultado de la búsqueda enlace solo al primer mensaje, porque el usuario que busca sabe exactamente qué tema quiere encontrar. Llegaría a argumentar que los usuarios que ya conocen el título del tema que están buscando deberían usar el filtro de búsqueda avanzada in:title. En la mayoría de los casos de búsqueda, el contenido del mensaje importa mucho, y una coincidencia parcial en el título del tema no debería significar que se muestre el primer mensaje del tema.
Quizás eso sería suficiente si la búsqueda avanzada fuera más sencilla. Personalmente, la encuentro increíblemente difícil de usar porque hay simplemente demasiadas opciones, lo que dificulta encontrar la que necesito. Tal vez sea solo yo
Quizás sería apropiado promover que la casilla de verificación in:title esté siempre visible. O mejor aún, tal vez un menú desplegable a la izquierda del cuadro de entrada con opciones como Todo, Títulos y Publicaciones tendría sentido, para permitir al usuario especificar el ámbito de búsqueda. Creo que este tipo de filtro de búsqueda es bastante común, por lo que (esperemos) sería intuitivo para los usuarios usarlo o ignorarlo según les parezca. Como ejemplo comparable, IMDb te permite buscar en Todo, Títulos, Actores, etc. (No recuerdo las opciones exactas de memoria). Tendrías que encontrar la forma de diferenciar Todo y Publicaciones, ya que básicamente son lo mismo ahora mismo, pero tal vez este enfoque vale la pena considerar.
Esto es lo que deberíamos hacer: no tiene absolutamente ningún sentido para mí que todas las publicaciones del tema tengan asociado el título del tema.
Necesitaremos aclarar esto con @sam, ya que así es como siempre se ha construido nuestro índice de búsqueda. De hecho, el índice de búsqueda de cada publicación incluye el título, el nombre de la categoría y los nombres de las etiquetas, incluso si la publicación no es la primera.