Refinamientos en la búsqueda que se están probando en meta

Recientemente, debido a comentarios internos, decidimos priorizar una ronda de mejoras en nuestro algoritmo de búsqueda.

Estos cambios ahora se han implementado en todos los sitios como parte de Discourse 3.1.0.beta3. Después de actualizar, su sitio comenzará automáticamente a reindexar todo su contenido para la búsqueda.

Hay dos nuevas configuraciones de sitio como parte de esto, pero se han establecido en valores que hemos encontrado que funcionan bien en nuestras pruebas aquí en meta, por lo que no esperamos que la mayoría de los sitios tengan ninguna razón para cambiarlas.

Priorizar la coincidencia de término completo en el título sobre la coincidencia parcial

Discourse realiza un stem + coincidencia de prefijo al buscar. Esto a veces puede llevar a resultados muy sorprendentes.

Por ejemplo: redis se deriva a redi, por lo que una búsqueda de redis puede encontrar todas las palabras que comienzan con redi, como redirect y más.

Se agregó una nueva configuración de sitio oculta: prioritize_exact_search_title_match, que ahora está habilitada por defecto.

Antes:

Después:

Esto significa que si recuerdas el título y lo escribes, es mucho más probable que encuentres el título.

Reducción de la duplicación máxima del índice

Nuestro algoritmo de clasificación clasifica las publicaciones que tienen múltiples coincidencias con un término más alto que las publicaciones que solo contienen el término una vez. Esto significa que puedes “hacer trampa” en la búsqueda simplemente repitiendo una palabra muchas veces. Cuanto más escribas la palabra, más alto flotará en la parte superior de la búsqueda.

Se agregó una nueva configuración de sitio oculta SiteSetting.max_duplicate_search_index_terms, que por defecto es 6.

Una vez que esto se aplique, significa que si escribes sam, 6 veces o 60 veces en una publicación, seguirá clasificándose igual. Pone un límite a la bonificación que puedes dar a los resultados.

Este cambio también tiene un impacto positivo en el rendimiento, dado que el índice de búsqueda se vuelve un poco más pequeño.

Correcciones de errores varios

Parte del trabajo consistió en examinar casos de búsqueda patológicos.

  • Anteriormente, reducíamos la prioridad de los temas cerrados, pero olvidamos los temas archivados. Esto ahora está corregido.

  • Anteriormente, dependíamos demasiado de las coincidencias de prefijo para las búsquedas de “dominio”. Lo que significa que la palabra happy no encontraría https://happy.com ya que happy se deriva a happi y la coincidencia de prefijo falla. Esto fue corregido.

Trabajo futuro

  • Planeamos experimentar con la búsqueda “difusa” para la autocompletación de menciones. (permitir omitir una letra, por ejemplo)

  • Planeamos investigar la despriorización de términos duplicados en los títulos. Actualmente, el tema cerrado hola adiós hola se clasifica más alto que el tema abierto hola mundo

  • PageRank… actualmente no tomamos en cuenta el número de enlaces entrantes e internos al clasificar los resultados. Esto significa que a veces temas increíblemente bien enlazados pueden clasificarse más bajo que un tema raro que no está enlazado desde ningún lado. Sería bueno tener esto en cuenta en nuestro algoritmo de clasificación.

  • Tenemos una iniciativa abierta que investiga las integraciones de IA, es posible que podamos obtener inspiración de herramientas similares a GPT.

¿Qué puedes hacer para ayudar?

¿Estás notando algún mal resultado en meta? Si es así, por favor incluye el término que buscaste explicando por qué los resultados son deficientes.

¿Cómo te parecen los cambios (neutral/mejor/peor)?

47 Me gusta

Solo para estar seguro… Si actualizo/mejora mi configuración, ¿encontraré esas dos configuraciones? Sé cómo encontrar las ocultas, eso no es un problema, pero ¿son solo de Meta en este momento? Para mí es más fácil probarlo en mis círculos que aquí :wink:

7 Me gusta

Sí, pero también necesitas ejecutar rake search:reindex

7 Me gusta

¿Has pensado en mejorar la búsqueda usando meilisearch? Esto requiere muy pocos recursos y se puede incluir en la compilación de docker.

5 Me gusta

7 publicaciones se dividieron en un nuevo tema: Priorizar temas cerrados o resueltos en la búsqueda

Hemos comenzado experimentos en esta área por

Los primeros experimentos se limitan a la búsqueda de usuarios/grupos, pero si todo va bien, se puede ampliar aún más.

8 Me gusta

Hemos considerado varias integraciones, incluidas sphinx, melli, elastic, solr/lucene, pero tienen un costo. Alojar otro proceso para ejecutar la indexación, arriesgarse a tener índices desactualizados, la complejidad… etc., nada de eso es gratis.

Me gustaría ver cuántos resultados obtenemos de PG antes de explorar otras opciones y mantenerlas como último recurso.

Problema muy interesante, sí, están (y siempre han estado) despriorizados. Creo que como mínimo podemos considerar agregar una configuración del sitio a discourse-solved para permitir a los administradores decidir qué hacer en estos casos (priorizar/despriorizar/neutral, etc.).

16 Me gusta

Desafortunadamente, postgres no está adaptado como motor de búsqueda. Y meilisearch tiene un consumo de memoria fantásticamente bajo y posibilidades de búsqueda ilimitadas. La sobrecarga para el servidor en comparación con ruby será simplemente invisible.

3 Me gusta

Este no es un problema trivial. Nuestra búsqueda contiene una enorme cantidad de dimensiones y tiene muchos parámetros, se une directamente a las tablas de postgres.

Con un proveedor de búsqueda externo, debemos preocuparnos por la “sincronización”.

  • Un tema se cierra en Discourse → notificar al motor
  • Se elimina una publicación → notificar al motor
  • Se da un “me gusta” → notificar al motor
  • Un tema se divide o se fusiona → notificar al motor

La lista continúa, incluida la creación de múltiples índices (usuarios/publicaciones/temas/categorías)

Dicho esto, dada la inversión adecuada, esto no es necesariamente insuperable, pero es una tarea enorme y no hay una prueba de concepto que muestre cuán mejor sería. Es bueno que melli tenga un clasificador de errores tipográficos y muchas otras características, no hay discusión al respecto. Pero integrarlo no es gratis en absoluto.

Como estimación aproximada, creo que hay alrededor de 3 meses de trabajo para construir una integración sólida y robusta en mellisearch. Quizás incluso 6 meses si diseñáramos Discourse de tal manera que el motor de búsqueda sea “enchufable”.

Tenga en cuenta que sí admitimos la integración de Algolia aquí: https://discourse.algolia.com/ no es exactamente sólido como una roca, y puede ver que toda la búsqueda avanzada se omite de la implementación.

8 Me gusta

Apuesto a que con una comunidad tan grande de discursos como discourse, puede ser mucho más rápido, no más de tres meses.

2 Me gusta

Después de un tiempo, pregunté qué pensaban mis usuarios más activos (pensaron :man_facepalming:) sobre la búsqueda; nunca dije que tuviera algunos esteroides.

Todos dijeron exactamente lo mismo; no lo habían pensado, pero como pregunté, se dieron cuenta de que ahora encontraban resultados relevantes mucho más fácilmente, en la mayoría de los casos de inmediato.

Una parte de Discourse actúa como sistema de comentarios de WordPress. No, no recibo más comentarios (nada está tan sobrevalorado como los comentarios de blogs), pero ha mostrado la existencia (¿se escribe así?) del foro. Hoy en día tengo un puñado de usuarios que usan Discourse como motor de búsqueda. No comentan, pero buscan lo que buscan en WordPress a través de los temas de Discourse y vuelven al blog. Claro, el sistema de etiquetas también ayuda mucho. Y a WordPress le faltan ambas cosas: búsqueda efectiva y etiquetado funcional.

No sé si debería publicar esto en Praise, pero solo quería decir que estoy bastante satisfecho con cómo funciona esta nueva y mejorada búsqueda.

11 Me gusta

¡Vaya, gracias, esto ciertamente me hace sentir muy bien! Tenemos una solicitud de extracción en proceso y deberíamos implementar los cambios a nivel mundial muy pronto.

11 Me gusta

Disculpen si soy obtuso: ¿debería esto estar activo en sitios alojados (con el último despliegue)? El anuncio de lanzamiento apunta aquí, pero esto habla de una configuración oculta. ¿Está activada esa configuración oculta?

6 Me gusta

No necesitas hacer nada:

Actualizaré la publicación original con una nota.

9 Me gusta

Gracias por la fantástica actualización. Para nosotros, poder definir sinónimos de búsqueda sería una gran mejora :pray: Gracias.

7 Me gusta

9 publicaciones se dividieron en un nuevo tema: ¿Puedo excluir nombres de usuario de la búsqueda

No estoy seguro de si este fue un problema antes, pero noté que muchas publicaciones creadas por el sistema aparecen en los resultados de búsqueda. Quizás un caso extremo más notable aquí en meta, pero no esperaría que los mensajes del sistema fueran relevantes para la búsqueda.

Resultado de ejemplo al buscar términos como “cerrado automáticamente”:

4 Me gusta

No puedo reproducirlo aquí.

3 Me gusta

Puedo reproducir eso; si los ordenas por la última publicación en lugar de por relevancia, hay muchos mensajes del sistema en los resultados.

4 Me gusta

Ah, sí, lo veo entonces. No es todo, pero es más que razonable. Parece que estos mensajes deberían excluirse de la búsqueda.

3 Me gusta