2012-03-04 13 views
12

Las aplicaciones web grandes ofrecen una búsqueda "global" que combina datos de varios índices de texto completo (esto sería una tabla en SQL) para proporcionar un resultado de búsqueda combinado ordenado por su puntuación. Así que digamos que usted tiene vídeos, artículos de blogs y usuarios, a continuación, cuando se escribe en "casa" en la búsqueda que podría producir resultados como este (ordenados por puntuación):Búsqueda multi-índice en ElasticSearch (Neumático)

  • My Home (artículo del blog)
  • Home Town (usuario)
  • quiero ir a casa (vídeo)

¿alguien sabe cómo realizar una búsqueda combinada usando tales Elasticsearch? Preferiblemente usando la gema Tire para Rails, pero los datos Raw ElasticSearch JSON también funcionarían.

Gracias.

Respuesta

16

respecto neumáticos, hay una distinción importante: ¿Está utilizando independiente o en la integración/ActiveModel ActiveRecord.

En el primer caso, simplemente busque en múltiples índices, Tire.search ['indexA', 'indexB'] do ... end. O busque en todo el clúster, Tire.search do ... end (equivalente a curl 'http://localhost:9200/_search?q=*').

En este último caso, Neumático no maneja bien las búsquedas de varios modelos, por el momento. Observe esta solicitud de extracción: https://github.com/karmi/tire/pull/218: construya su joya con este parche aplicado y ayude a probar la solución.

ACTUALIZACIÓN

actual Neumático (> 0,4) pueden cargar múltiples instancias de modelo muy bien. Ver el integration test por ejemplo.

+1

Una respuesta directa del propietario de la gema :) Muchas gracias! Y Sí, lo estoy usando con ActiveRecord. En el peor de los casos, simplemente estableceré: load => false para que no genere ningún objeto ActiveRecord. – matsko

+0

Sí, sin ': cargar", obtendrá modelos "elásticos", instancias 'Tire :: Results :: Item'. Sin embargo, las búsquedas multimodelo es algo que deberíamos apoyar y me gusta el parche en el número 218. – karmi

1

Estoy bastante seguro de que el punto final http://127.0.0.1:9200/_search hará el truco para usted. Más del 99% de mis datos están en un índice, por lo que es difícil para mí verificar esto aquí.

También, consulte el punto final multi-búsqueda: http://www.elasticsearch.org/guide/reference/api/multi-search.html

+0

¿Cuál es el beneficio/desventaja de poner la mayoría de sus datos en un solo índice de ES? La búsqueda es definitivamente más fácil, menos compleja, ¿pero tiene inconvenientes? – raffian

+0

A veces es inviable tener solo 1 índice único. A veces simplemente calcula mal el número de fragmentos por adelantado, y crear un nuevo índice es más rápido que volver a indexar todo en otro índice. –

Cuestiones relacionadas