2010-01-03 9 views

Respuesta

4

Apache Lucene es la opción de hecho para la indexación de texto completo en Java. Parece que Compass Core contiene "Una implementación de Lucene Directory para almacenar el índice dentro de una base de datos (usando Jdbc). Está separado de la base de código de Compass y se puede usar con aplicaciones de Lucene puro". más toneladas de otras cosas. Podrías tratar de separar solo el componente de Lucence, eliminando así varias libs y haciéndolo más liviano. O eso o abandona a Compass por completo y usa Lucene puro y sin adornos.

+0

Sí, probablemente seguiré por este camino. Mi preocupación sobre el uso de Lucene es que IO es muy costoso en App Engine y espero que algún cuerpo ya haya producido una versión optimizada de Lucene o de una biblioteca propia, lo que implica un costo de IO extremadamente alto. – user242726

1

Para Google App Engine, la única biblioteca de indexación que he visto es appengine-search, con una descripción de cómo usarlo en this page. No lo he probado, sin embargo.

He usado Lucene (en el que se basa Compass) y encontré que funciona muy bien con un gasto comparativamente bajo. La indexación es una tarea que puede programar a veces para su aplicación.

Algunos proyectos de indexación de alternativas se mencionan en this SO thread, que incluyen y minion. Sin embargo, no he verificado ninguno de estos, ya que Lucene hizo todo lo que necesitaba muy bien.

6

Para ser sincero, no sé si Lucene será más ligero que Compass en términos de indexación (¿por qué sería así, no utiliza Compass Lucene para eso?).

De todos modos, porque ha pedido alternativas, hay GAELucene. Estoy citando its announcement a continuación:

Iluminado por la discusión "Can I run Lucene in google app engine?", he implementado un almacén de datos de Google componente Lucene, basado GAELucene, que puede ayuda que para ejecutar aplicaciones de búsqueda en el motor de aplicación Google.

El clazz principal del GAELucene incluyen:

  • GAEDirectory - una única Directorio leer basado en Google almacén de datos.
  • GAEFile: representa un archivo de índice, el contenido del byte del archivo será splited en multi GAEFileContent.
  • GAEFileContent: es un segmento del archivo de índice.
  • GAECategory - el identificador de diferentes índices.
  • GAEIndexInput: un IndexInput residente en memoria? implementación como el RAMInputStream.
  • GAEIndexReader - contenedor para IndexReader?que en caché en GAEIndexReaderPool
  • GAEIndexReaderPool - piscina para GAEIndexReader

El siguiente fragmento de código demuestra el uso de GAELucene hacer búsqueda:

Query queryObject = parserQuery(request); 
GAEIndexReaderPool readerPool = GAEIndexReaderPool.getInstance(); 
GAEIndexReader indexReader = readerPool.borrowReader(INDEX_CATEGORY_DEMO); 
IndexSearcher searcher = newIndexSearcher(indexReader); 
Hits hits = searcher.search(queryObject); 
readerPool.returnReader(indexReader); 

recomiendo encarecidamente leer toda la discusión en nabble, muy informativo.

Por si acaso, en relación con brújula, Shay Banon escribió una entrada de blog que detalla cómo utilizar Compass en App Engine aquí: http://www.kimchy.org/searchable-google-appengine-with-compass/

+0

Tenga en cuenta que GAELucene no le permite crear índices en GAE. Debe preparar archivos de índice en algún lugar y cargarlos en GAE. – yegor256

+0

También hay una nota en el Código de Google que dice: "GAELucene no es apto para ejecutarse con índices enormes, es mejor para índices pequeños, alrededor de 100Mb. Para índices que cambian grandes, necesita encontrar otras soluciones". –

0

Si quieres ejecutar Lucene en GAE también puedes echar un vistazo a LuGAEne. Es una implementación de Lucene's Directory para GAE.

uso es realmente muy sencillo, basta con reemplazar a uno de los directorios estándar de Lucene con GaeDirectory

Directory directory = new GaeDirectory("MyIndex"); 
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43); 
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer); 
IndexWriter writer = new IndexWriter(directory, config); 
... 

gaelucene parece estar en "modo de mantenimiento" (sin cometer desde sep 2009) y lucene-appengine no (todavía) el trabajo cuando usa Objectify versión 4 en su aplicación.

Descargo de responsabilidad: soy el autor de LuGAEne.

Cuestiones relacionadas