2010-01-03 10 views

risposta

4

Apache Lucene è la scelta di fatto per l'indicizzazione di testo completo in Java. Sembra che Compass Core contenga "Un'implementazione di Lucene Directory per memorizzare l'indice all'interno di un database (utilizzando Jdbc) .Si separa dalla base di codice di Compass e può essere utilizzato con applicazioni di Lucene pure." più tonnellate di altre cose. Potresti provare a separare solo il componente Lucence, eliminando diverse librerie e rendendola più leggera. O quello o scavare Compass del tutto e usare la pura disadorna Lucene.

+0

Sì, probabilmente andrò da questa parte. La mia preoccupazione per l'utilizzo di Lucene è che IO è molto costoso su App Engine e spero che un certo ente abbia già prodotto una versione ottimizzata di Lucene o una libreria sviluppata in casa che tiene in considerazione un costo IO estremamente alto. – user242726

1

Per Google App Engine, l'unica libreria di indicizzazione che ho visto è appengine-search, con una descrizione di come utilizzarlo su this page. Non l'ho provato però.

Ho usato Lucene (su cui è basata la bussola) e l'ho trovato ottimo con costi relativamente bassi. L'indicizzazione è un'attività che puoi pianificare a volte che funzionano per la tua app.

Alcuni progetti di indicizzazione alternativi sono menzionati in this SO thread, inclusi Xapian e minion. Non ho controllato nessuno di questi, però, dato che Lucene ha fatto tutto ciò che mi serviva molto bene.

6

A dire il vero, non so se Lucene sarà più leggero di Compass in termini di indicizzazione (perché dovrebbe essere, Bussola non usa Lucene per questo?).

In ogni caso, perché hai chiesto delle alternative, c'è GAELucene. Sto citando its announcement di seguito:

Illuminati dalla discussione "Can I run Lucene in google app engine?", ho implementato un archivio dati di Google basato componente Lucene, GAELucene, che può aiuto di eseguire le applicazioni di ricerca su App Engine google.

La Clazz principale della GAELucene includono:

  • GAEDirectory - una sola lettura Directory basato su google datastore.
  • GAEFile - sta per un file indice, il contenuto del byte del file sarà diviso in più GAEFileContent.
  • GAEFileContent - indica un segmento di file di indice.
  • GAECategory - l'identificatore di diversi indici.
  • GAEIndexInput - un IndexInput residente in memoria? implementazione come lo RAMInputStream.
  • GAEIndexReader - wrapper per IndexReader?che nella cache in GAEIndexReaderPool
  • GAEIndexReaderPool - piscina per GAEIndexReader

Il seguente frammento di codice dimostra l'uso di GAELucene fare ricerca:

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); 

vi consiglio vivamente di leggere l'intera discussione su nabble, molto informativo.

Solo nel caso, per quanto riguarda la bussola, Shay Banon ha scritto un blog in dettaglio come utilizzare la bussola in App Engine qui: http://www.kimchy.org/searchable-google-appengine-with-compass/

+0

Ricorda che GAELucene non ti consente di creare indici in GAE. Dovresti preparare i file indice da qualche parte e caricarli su GAE. – yegor256

+0

Nel Google Code c'è anche una nota in cui si dice "GAELucene non è adatto a funzionare con indici enormi, è meglio per gli indici piccoli, circa 100 Mb. Per gli indici in continua evoluzione, è necessario trovare altre soluzioni". –

0

Se si desidera eseguire Lucene su GAE si potrebbe anche dare un'occhiata a LuGAEne. È un'implementazione di Luciano Directory per GAE.

L'uso è in realtà piuttosto semplice, basta sostituire una delle directory standard di 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 sembra essere in "modalità di manutenzione" (senza commettere dal set 2009) e lucene-appengine non lo fa (ancora) il lavoro quando usi la versione 4 Objectify nella tua applicazione.

Disclaimer: Sono l'autore di LuGAEne.

Problemi correlati