2010-10-25 21 views
15

Tengo un archivo de índice Solr/Lucene de aproximadamente 700 Gb. Los documentos que necesito para indexar se leen en tiempo real, aproximadamente 1000 documentos cada 30 minutos se envían y deben ser indexados. En mi escenario, se ejecuta un script cada 30 minutos que indexa los documentos que aún no están indexados, ya que es un requisito que los nuevos documentos se puedan buscar lo antes posible, pero este proceso ralentiza la búsqueda.¿La mejor manera de mantener el índice en tiempo real?

¿Es esta la mejor manera en que puedo indexar los últimos documentos o hay alguna otra manera mejor!

Respuesta

10

En primer lugar, recuerde que Solr no es un motor de búsqueda en tiempo real (todavía). Todavía hay work por hacer.

Puede usar un master/slave setup, donde la indexación se realiza en el maestro y la búsqueda en el esclavo. Con esto, la indexación no afecta el rendimiento de búsqueda. Después de que la confirmación se realiza en el maestro, obligue al esclavo a buscar el último índice del maestro. Mientras el nuevo índice se está replicando en el esclavo, todavía está procesando consultas con el índice anterior.

Además, verifique cache warming settings. Recuerde que esto puede ralentizar las búsquedas si esas configuraciones son demasiado agresivas. También verifique las consultas lanzadas en el new searcher event.

+1

Actualización: Solr ahora tiene (casi) capacidades de búsqueda en tiempo real. – mt3

+0

@ mt3 enlace para más información? – Simon

+1

@Simon Lo siento por la respuesta tardía. Está en el tronco de la rama Solr/Lucene. http://wiki.apache.org/solr/NearRealtimeSearch – mt3

4

Puede hacer esto con Lucene fácilmente. Divida los índices en varias partes (o para ser precisos, mientras crea índices, cree partes "más pequeñas"). Cree un buscador para cada parte y almacene una referencia a ellas. Puede crear un MultiSearcher encima de estas partes individuales.

Ahora, solo habrá un índice que obtendrá los nuevos documentos. A intervalos regulares, agregue documentos a este índice, confirme y vuelva a abrir este buscador.

Después de que se actualice el último índice, puede crear un nuevo multi-buscador nuevamente, utilizando los buscadores abiertos anteriormente.

Por lo tanto, en cualquier punto, volverá a abrir solo un buscador y será bastante rápido.

1

^^ hago esto, con lucene normal, sin solr, y funciona muy bien. sin embargo, no estoy seguro de si hay alguna forma de hacerlo en este momento. Recientemente, Twitter fue con lucene para buscar y tiene una búsqueda efectiva en tiempo real al escribir en su índice en cualquier actualización. su índice reside completamente en la memoria, por lo que actualizar/leer el índice no tiene importancia y ocurre instantáneamente, un índice de lucene siempre se puede leer mientras se escribe, siempre y cuando haya solo un escritor por vez.

+0

"sucede al instante" -> la latencia sigue siendo de alrededor de 10 segundos – Karussell

1
+0

Incluya más que solo un enlace en su respuesta. Extraiga la información relevante para que no todos tengan que hacer clic, y todavía tiene algún valor si el enlace se apaga. – agf

Cuestiones relacionadas