Какая библиотека Java для индексирования текста лучше всего подходит для Google App Engine?

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

7
задан Asaph 3 January 2010 в 18:47
поделиться

3 ответа

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

.
4
ответ дан 6 December 2019 в 23:06
поделиться

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

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

Просвещенное обсуждением "Могу я запустить Люсин в Google app engine?", Я внедрил хранилище данных Google на базе Компонент люцена, галюцин, который может поможет вам запустить поисковые приложения на движок приложений Google.

Главная клавиша GAELucene включает:

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

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

Query requestObject = parserQuery(request);
GAEIndexReaderPool readerPool = GAEIndexReaderPool.getInstance();
GAEIndexReader indexReader = readerPool.borrowReader(INDEX_CATEGORY_DEMO);
IndexSearcher searchcher = newIndexSearcher(indexReader);
Hitsits = searchcher.search(queryObject);
readerPool.returnReader(indexReader);

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

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

6
ответ дан 6 December 2019 в 23:06
поделиться

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

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

Некоторые альтернативные проекты индексации упоминаются в этом SO потоке, в том числе Xapian и minion. Но я не проверил ни то, ни другое, так как Люсин сделала все, что мне было нужно, чтобы это было очень хорошо.

.
1
ответ дан 6 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: