2010-01-03 4 views

ответ

4

Apache Lucene является де-факто выбором для полной индексации текста в Java. Похож, что Compass Core содержит «Реализация Lucene Directory для хранения индекса в базе данных (с использованием Jdbc). Он отделен от базы данных Compass и может использоваться с чистыми приложениями Lucene». плюс тонны других вещей. Вы можете попытаться отделить только компонент Lucence, тем самым убрав несколько библиотек и сделав их более легкими. Либо это, либо канаву Компас вообще, и используйте чистую неприкрашенную Люцену.

+0

Возможно, я поеду сюда. Моя забота об использовании Lucene заключается в том, что IO очень дорого стоит на App Engine, и я надеюсь, что в каком-то теле уже была выпущена оптимизированная версия Lucene или домашней библиотеки, которая учитывает чрезвычайно высокую стоимость ввода-вывода. – user242726

1

Для Google App Engine единственная библиотека индексирования, которую я видел, это appengine-search с описанием того, как ее использовать на this page. Однако я не пробовал.

Я использовал Lucene (на котором основан Compass) и нашел, что он отлично работает при сравнительно низких расходах. Индексирование - это задача, которую вы можете запланировать время от времени, которое работает для вашего приложения.

Некоторые проекты индексации альтернатив упоминаются в this SO thread, включая Xapian и minion. Я не проверил ни одно из них, поскольку, поскольку Lucene делала все, что мне нужно, это очень хорошо.

6

Если честно, я не знаю, будет ли Lucene легче, чем компас с точки зрения индексации (почему бы и нет, не использует ли Compass Lucene для этого?).

В любом случае, поскольку вы попросили альтернативы, есть GAELucene. Я цитирую its announcement ниже:

Просвещенные дискуссии «Can I run Lucene in google app engine?», я реализовал Google хранилищу на основе Lucene компонент, GAELucene, который может помочь вам запускать программы поиска на Google App Engine.

Основной clazz из GAELucene включают в себя:

  • GAEDirectory - только для чтения каталога, основанный на Google датасторе.
  • GAEFile - обозначает индексный файл, содержимое байта файла будет , разбитое на несколько GAEFileContent.
  • GAEFileContent - обозначает сегмент индексного файла.
  • GAECategory - идентификатор различных индексов.
  • GAEIndexInput - резидентный индекс IndexInput? как RAMInputStream.
  • GAEIndexReader - обертка для IndexReader?что кэшируются в GAEIndexReaderPool
  • GAEIndexReaderPool - бассейн для GAEIndexReader

Следующий фрагмент кода демонстрирует использование GAELucene сделать поиска:

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

Я горячо рекомендую прочитать всю дискуссию на nabble, очень информативный.

Только в случае, относительно Compass, Шей Banon написал запись в блоге с подробным описанием, как использовать компас в App Engine здесь: http://www.kimchy.org/searchable-google-appengine-with-compass/

+0

Имейте в виду, что GAELucene не позволяет вам создавать индекс в GAE. Вы должны где-то подготовить индексные файлы и загрузить их в GAE. – yegor256

+0

В Google Code также есть примечание: «GAELucene не подходит для работы с огромными индексами, он лучше подходит для небольших индексов, около 100 МБ. Для больших изменяющихся индексов вам нужно найти другие решения». –

0

Если вы хотите запустить Lucene на GAE, вы также можете взглянуть на LuGAEne. Это реализация Lucene's Directory для GAE.

Использование не является на самом деле довольно просто, просто заменить один из стандартных каталогов Lucene с 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, кажется, в «режиме обслуживания» (без фиксации с сентября 2009 года) и lucene-appengine не (пока) работы когда вы используете Objectify версии 4 в своем приложении.

Отказ от ответственности: Я автор LuGAEne.

Смежные вопросы