Полнотекстовый поиск: Whoosh Vs SOLR

Я понимаю их на примерах. :)

Во-первых, Лексическая область (также называемая Static Scope) в синтаксисе C-like:

void fun()
{
    int x = 5;

    void fun2()
    {
        printf("%d", x);
    }
}

Каждый внутренний уровень может получить доступ к своим внешним уровням.

Существует другой способ, называемый Dynamic Scope, используемый первой реализацией Lisp, снова в C-подобном синтаксисе:

void fun()
{
    printf("%d", x);
}

void dummy1()
{
    int x = 5;

    fun();
}

void dummy2()
{
    int x = 10;

    fun();
}

Здесь fun может либо получить доступ к x в dummy1, либо dummy2 или любой x в любой функции, вызывающей fun с x, объявленной в нем.

dummy1();

будет печатать 5,

dummy2();

будет печатать 10.

Первый называется static, поскольку он может быть выведен во время компиляции, второй называется динамическим, поскольку внешняя область является динамической и зависит от цепного вызова функций.

Я считаю, что статическое оглавление легче для глаза. Большинство языков пошло так, в конце концов, даже Lisp (можно сделать оба, правильно?). Динамическое масштабирование похоже на передачу ссылок на все переменные вызываемой функции.

Пример того, почему компилятор не может вывести внешнюю динамическую область функции, рассмотрим наш последний пример, если мы напишем что-то вроде этого:

if(/* some condition */)
    dummy1();
else
    dummy2();

Цепочка вызовов зависит от условия выполнения. Если это правда, то цепочка вызовов выглядит так:

dummy1 --> fun()

Если условие ложно:

dummy2 --> fun()

Внешняя область действия fun в обоих случаях равна caller плюс вызывающий абонент и т. д. .

Просто отметим, что язык C не допускает вложенных функций и динамического охвата.

30
задан Ankit Jaiswal 12 July 2010 в 07:33
поделиться

2 ответа

Whoosh на самом деле очень быстро для реализации только на python. Тем не менее, он по крайней мере на порядок медленнее. В зависимости от объема данных, которые необходимо индексировать и выполнять поиск, а также требований к максимально допустимой задержке и одновременному поиску, это может быть не вариант.

SOLR - немного сложный зверь, но на сегодняшний день это наиболее полное решение для поиска. Смешайте его с solrpy для получения потрясающих результатов. Да, вам понадобится java-хостинг.

Вы также можете проверить привязки python для xapian . Xapian очень-очень быстрое, но менее полное решение, чем SOLR. Однако они под лицензией GPL, так что это может / не может быть для вас жизнеспособным.

15
ответ дан 27 November 2019 в 21:16
поделиться

Я использовал Lucene и расширения Lucene, такие как SOLR и Nutch, и обнаружил, что lucene практически полностью удовлетворяет то, что мне нужно. Я пробовал Whoosh только один раз, но выбрал Lucene, потому что 1) я использую Java 2) у меня были проблемы с тем, чтобы заставить UTF-8 работать с Whoosh (не уверен, работает ли он сейчас из коробки). В Lucene у меня не было проблем с работой с китайскими иероглифами.

Если вы используете Python в качестве языка программирования и Whoosh удовлетворяет вашим потребностям, я бы посоветовал вам использовать его вместо альтернатив Java для лучшей интеграции, избежания внешних зависимостей, более быстрой настройки, если вам нужно написать дополнительные функции.

UPDATE: Если вы заинтересованы в использовании Lucene, у него есть обертка для Python: See http://lucene.apache.org/pylucene/

1
ответ дан 27 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

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