Comments 31
«Мной он был выбран из этих трех продуктов за возможность использования из .Net.»
Раскройте смысл этой фразы пожалуйста несколько подробнее.
Тк Apache Lucene имеет вообще .net версию, у которой есть еще и форк к тому же.
А то прям складывается впечатление, что для .net кроме обертки на Xapian ничего и нету
Раскройте смысл этой фразы пожалуйста несколько подробнее.
Тк Apache Lucene имеет вообще .net версию, у которой есть еще и форк к тому же.
А то прям складывается впечатление, что для .net кроме обертки на Xapian ничего и нету
да и для сфинкса есть нетовский клиент
Есть и даже очень неплохие. Я использую SphinxConnector, правда он платный, но в отличии от бесплатных поддерживает SphinxQL. Что очень удобно. Получается эдакий укрупненный MySQL сервера. На 3306 порту, допустим, висит просто сервер MySQL висит, а на 3307 — Sphinx сервер, принимающий SphinxQL запросы. В реализации отличия вообще стираются, к какому серверу делать запрос решается программой.
Почитал, действительно есть. Ну и в причины выбора можно добавить более высокую производительность, и неограниченный размер базы даже для 32 битной системы(у Lucence ограничение в 2Gb, не хватило бы дяже для приведенного теста).
Спасибо. Теперь понятнее.
У нас в проекте просто база на Lucene.Net (правда не понятно что живее она или ее форк Aimee), только размер у нас вполне себе скромный.
У нас в проекте просто база на Lucene.Net (правда не понятно что живее она или ее форк Aimee), только размер у нас вполне себе скромный.
Вы считаете, что если сишка, то обязательно быстрее? У меня на ноуте Lucene перемалывает 300 метров текста из мускульной базы за 90 секунд. 2GB — это лимит размера индексного файла, который в несколько раз меньше собственно текста. Да и проблемами с переносимостью из-за использования прекомпилированных бинарников Lucene не страдает.
На Xapiane при индексании всего текста файлов размер индексного файла перевалил за 3 Gb при тесте.
И да, считаю что хорошо написанный код на С, будет быстрее аналогов на других ЯП не считая машинного кода и ассемблера.
Вы сначала найдите «хорошо написанный код на С»
Ну мне кажется *nix системы неплохо функционируют, а также сотни различных драйверов, примеров найти много можно. В том числе рассмотренный в этой статье продукт, результаты тестирования вполне устроили.
Вы сейчас сравнили прикладной и системный уровень, что, мягко говоря, некорректно. Ядро не сталкивается с задачей индексирования текста и прочими сложными алгоритмами. Там совершенно иной класс задач, который может быть выполнен нормально только на С.
Для прикладного же уровня обычно на производительность влияет не используемый язык, а алгоритм. Если у вас код работает за O(n3), то вы его хоть на асм перепишите, быстрее он от этого не станет.
Кстати, с этим вашим Xapian гемморой возникнет именно на этих самых *nix системах, где Lucene.Net не требует перекомпиляций и патчей, а просто работает «из коробки».
Для прикладного же уровня обычно на производительность влияет не используемый язык, а алгоритм. Если у вас код работает за O(n3), то вы его хоть на асм перепишите, быстрее он от этого не станет.
Кстати, с этим вашим Xapian гемморой возникнет именно на этих самых *nix системах, где Lucene.Net не требует перекомпиляций и патчей, а просто работает «из коробки».
Не использую *nix системы, ничего не могу сказать по этому поводу. Насчет языков в целом согласен, писать для современного железа не так и важно на каком языке.
Дело не в железе, дело в экономии на спичках. Дотнет перемалывает данные с примерно той же скоростью, что и сишка, там разница в лучшем случае процентов 10 будет на таких задачах при усложнении кода в целом и оптимизаций на алгоритмы в частности. Вот если бы это был шедулер потоков, то тогда да, был бы смысл даже на асме писать.
А вы попробуйте Lucene.Net на вашей инфобазе. Или, если не NDA, скиньте её куда-нть, чтобы сообщество само потестировало.
P.S. Вообще хорошая тема для наброса сравнения — полнотекстовая индексация. На Хабре за наезды в адрес Сфинкс, например, вычислят по ip и будут угрожать :)
P.S. Вообще хорошая тема для наброса сравнения — полнотекстовая индексация. На Хабре за наезды в адрес Сфинкс, например, вычислят по ip и будут угрожать :)
Попробую. Как раз занят подбором индексатора под Windows. Результат выложу.
Что-то время индексации совершенно удручающее. Подозреваю, что затык в памяти и постоянный своп всё убивет. Могу только сказать, что у меня на хорошей конфигурации ~1.7 Гб текста индексируются в ~700 Мб индекса за минут 20 при этом позволяя искать по всем мыслимым запросам поддерживаемым Lucene: lucene.apache.org/java/2_9_1/queryparsersyntax.html
> Показатели весьма оптимистичные, особенно для такой слабой машины.
Машина нормальная, именно на такой в свое время индексировал 100 мег за пару минут :)
Советую еще проверить время более сложного поиска, чем «первые 100 матчей и прикидка числа совпадений», может сильно отличаться.
А файлы текстовые или doc/pdf/...?
Машина нормальная, именно на такой в свое время индексировал 100 мег за пару минут :)
Советую еще проверить время более сложного поиска, чем «первые 100 матчей и прикидка числа совпадений», может сильно отличаться.
А файлы текстовые или doc/pdf/...?
xml
Ага, спасибо. Те. неделю заняла по сути индексация вчистую, без всякого разбора документов. Очень круто на самом деле — мне б терпения ждать не хватило :)
Еще один совет кстати вспомнил: проверить полную (!) выдачу поиска. После того, как выяснилось, что до 90% фактически совпадающих документов Xapian тупо теряют — мои тесты в свое время быстро свернулись :)
Еще один совет кстати вспомнил: проверить полную (!) выдачу поиска. После того, как выяснилось, что до 90% фактически совпадающих документов Xapian тупо теряют — мои тесты в свое время быстро свернулись :)
Спасибо за демонстрацию еще одного подхода. Я пользуюсь Lucene при индексации. Он же используется при подсветке найденных результатов. Поддерживаю стремление увидеть сравнительную характеристику между тремя подходами. Если вам нужна будет помощь с Lucene, обращайтесь, чем могу, помогу.
1) Почему-то при каждом сканировании документов в базу добавляются всё те же документы. Простого способа как не добавлять дубликаты я не нашел.
2) Хотя в исходном коде используется стемминг, у меня он так и не заработал.
2) Хотя в исходном коде используется стемминг, у меня он так и не заработал.
Чтобы не добавлялись одни и те же документы, нужно для каждого документа генерировать уникальный идентификатор и добавлять его в документ с префиксом
Q
(такой префикс предлагает документация Omega), а затем использовать метод API replace_document_by_term
с этим термом. В случае, если документ с таким термом уже есть, он будет заменён, а иначе — добавлен.Sign up to leave a comment.
Индексирование и поиск с помощью Xapian в .NET