Hasta el momento sé que la brújula puede manejar este trabajo. Pero indexar con brújula parece bastante caro. ¿Hay alguna alternativa más ligera?¿Cuál es la mejor biblioteca de indexación de texto de Java para Google App Engine?
Respuesta
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.
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.
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/
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
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". –
El motor de búsqueda interno de Google App parece mejor, y sinónimos incluso havsupport:
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.
- 1. Mejor búsqueda de texto completo para google-app-engine
- 2. Búsqueda de texto completo en Google App Engine (Java)
- 3. Google App Engine: ¿Cuál es su RDBMS?
- 4. ¿Cuál es la diferencia principal entre Java para Google App Engine y Java EE?
- 5. ClassNotFoundException con Google App Engine para Java
- 6. ¿Google App Engine es adecuado para mí?
- 7. app-engine-patch está muerto. Ahora, ¿cuál es la mejor forma de usar Django en Google App Engine?
- 8. ¿Cómo precompila Java App Engine de Google?
- 9. OpenID para Google App Engine
- 10. ¿Memcache (Java) para Google App Engine es un caché global?
- 11. ¿Cómo incluyo la biblioteca de bandas con Google App Engine?
- 12. Control de versión para Google App Engine
- 13. Google App Engine: ¿Java o Python?
- 14. Google App Engine
- 15. ¿Alternativa para Google App Engine?
- 16. Administración personalizada de usuarios para Google App Engine Java
- 17. ¿Google App Engine es compatible con ftp?
- 18. Pruebas de integración para Google App Engine (java)
- 19. Motor de plantilla para Google App Engine
- 20. Mejor método de agrupación de canales en Google App Engine
- 21. Google App Engine Desarrollo Java en IntelliJ?
- 22. MVC en Google App Engine Java world
- 23. ¿Cómo agilizo la implementación de Java Google App Engine?
- 24. Google App Engine: ¿quién es un administrador?
- 25. ¿Cuál es la mejor manera de especificar un key_name para el modelo NDB de App Engine?
- 26. Roles en Java Google App Engine
- 27. ¿Aplicación RESTful en Google App Engine Java?
- 28. Capa de compatibilidad de Google App Engine
- 29. Técnicas de paginación con Google App Engine
- 30. Google App Engine Locking
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