13
Великотърновски университет „Св. Св. Кирил и Методий“ РЕФЕРАТ на тема Full text search - сравнение между Apache Solr и Elasticsearchпо дисциплината „Моделиране на информационни системи“ Изготвил: Любомир Филипов, I курс Информатика. Информационни системи, Факултетен № МПИ-10789р Проверил: доц. д-р Цветанка Георгиева-Трифонова

Full text search - сравнение между Apache Solr и Elasticsearch

Embed Size (px)

Citation preview

Page 1: Full text search - сравнение между Apache Solr и Elasticsearch

Великотърновски университет

„Св. Св. Кирил и Методий“

РЕФЕРАТ на тема

„Full text search - сравнение между Apache Solr и

Elasticsearch“ по дисциплината „Моделиране на информационни системи“

Изготвил:

Любомир Филипов,

I курс Информатика.

Информационни системи,

Факултетен № МПИ-10789р

Проверил:

доц. д-р Цветанка

Георгиева-Трифонова

Page 2: Full text search - сравнение между Apache Solr и Elasticsearch

2

Съдържание Full text search .............................................................................................................................................. 3

Индексиране ............................................................................................................................................ 3

Precesion vs recall ..................................................................................................................................... 4

Подвеждащи отговори ........................................................................................................................... 5

Apache Solr ................................................................................................................................................... 6

Elasticsearch .................................................................................................................................................. 7

Сравнение между Apache Solr и Elasticsearch ........................................................................................... 8

Отворен код ............................................................................................................................................. 8

Статистики и метрики ............................................................................................................................. 9

Стартиране на продукта.......................................................................................................................... 9

Бързодействие ....................................................................................................................................... 10

REST API .................................................................................................................................................. 11

Заявки за търсене .................................................................................................................................. 11

Документация ........................................................................................................................................ 11

Коментари от разработчици ................................................................................................................ 12

Заключение ................................................................................................................................................ 12

Page 3: Full text search - сравнение между Apache Solr и Elasticsearch

3

Full text search

При извличането на текстове full text search(„пълнотекстово

търсене“) се отнася към търсенето на компютърно запазен документ или

колекция в специализирана база от данни. Този тип търсене е различно от

търсенето базирано на метаданнни или на части от текста, запазени в бази от

данни(като заглавия, секции или библиографски референции). При

пълнотекстово търсене, машината за търсене обработва всички думи във

всеки запазен документ, защото се опитва да намери съвпадение със зададен

критерий(който може да бъде зададен и от потребител). Техниките базирани

на пълнотекстово претърсване стават популярни през 1990 година, когато се

разпространяват библиографски бази от данни. Много онлайн продукти и

приложни програми(като системите за обработка на текст) предлагат

възможности за пълнотекстово претърсване. Някои онлайн търсачки като

Alta Vista използват такива техники, докато други индексират само част от

онлайн страниците, анализирани от техните системи.

Индексиране

Когато се работи с малък брой документи е възможно за пълно

претърсване на текст директно да сканира съдържанието на документите за

всяка заявка, стратегия, която се нарича “serial scanning”. (серийно

сканиране). Подобен начин на действие е заложен в „grep“(пакет достъпен в

Linux/Unix операционни системи за търсенe), когато търси. Когато броят на

документите за претърсване е потенциално голям или бройката на заявките

за търсене е голям, проблемът на пълнотекстово търсване се разделя на две

части – индексиране и търсене. При частта за индексиране ще се сканира

съдържанието на всички документи и ще се изгради списък от

термините(често наричан индекс, но е по-коректно да се нарича

Page 4: Full text search - сравнение между Apache Solr и Elasticsearch

4

„concordance“ – буквален превод „сългасуване“). По време на фазата за

търсене, когато се изпълнява специфична заявка, се търси само в индекса,

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

индексиране ще се направи запис за всеки термин или дума намерен в

документа и има възможност при някои да запази референция за това къде се

намира в документа. По принцип се игнорират съюзи или други “stop

words”(думи, които са филтрирани преди или след обработка на текст, които

нямат смисъл) като “the” и “and”, които са често срещани и нямат особено

значение, ако са сами. Някои системи за индексиране прилагат специално

филтриране базирано на езика, който се използва. Например на английски

език думите “drives”,”drove” и “driven” ще бъдат записани в индекса като

една дума “drive”.

Precesion vs recall

Recall1 измерва количеството на коректните резултати върнати от

търсенето, докато precision2 измерва качеството на резултатите. Recall е

отношението на върнатите коректни резултати разделено на всички коректни

резултати. Precision е бройката на върнатите коректни резултати разделено на

всички върнати резултати.

1 В буквален превод означава „отзоваване“, но няма строго приет термин, който да отговаря пряко на

значението му посочено в текста, затова ще се използва с оригиналния термин „recall”.

2 Точност

Page 5: Full text search - сравнение между Apache Solr и Elasticsearch

5

Фиг.1 Разпределение на въведените метрики

Диаграмата показва разпределение на въведените метрики. Според

нея червените и зелените точки представляват общата бройка на

потенциалните резултати за даденото търсене. Червените точки

представляват несвързаните резултати, а зелените точки представляват

коректните резултати. Коректността на резултатите е указана от множеството

на резултатите в центъра. От всички възможни резултати, тези, които са били

върнати от търсене, са показани в светло синьо. Според примера само един

коректен резултат от три възможни е върнат, затова recall е с много ниска

стойност 1/3 или 33%. Precision е много ниска ¼ или 25%, тъй като само един

от четирите резултата е коректен.

Подвеждащи отговори

При пълнотекстово търсене е нормално да се върнат много

документи, които не са свързани с търсения въпрос. Такива документи се

наричат подвеждащи отговори. Връщането на некоректни резултати често е

свързано с различия от самия език. Според диаграмата подвеждащите

Page 6: Full text search - сравнение между Apache Solr и Elasticsearch

6

отговори са представени от некоректните резултати(точките в червено),

които са върнати от търсенето(частта в светло синьо). Има техники за

клъстериране, които могат да помогнат за намаляването на подвеждащите

резултати, базирани на „Bayesian3“ алгоритми. Например при търсене за

“football”, чрез клъстериране може да се категоризира резултата към

“American footbal”, “corporate football” и т.н. Осланяйки се на думите,

свързани с категориите, термините за търсене или резултата при търсене

може да бъде разположен в една или няколко категории. Техниката е широко

използвана при проучвания.

Подобренията, свързани с пълнотекстово търсене са два типа.

Единият от тях залага на добавянето на инструменти, чрез които

потребителите да поставят и опишат своите критерии са търсене по

обстойно. Вторият е свързан с разработване на оптимални алгоритми за

търсене.

Apache Solr

Solr (“solar”) е голяма платформа за търсене с отворен код, написана

на Java, от Apache Lucene проекта. Основните функционалности, които

предоставя включват търсене с пълно претърсване, намиране на съвпадения,

индексиране в реално време, динамично клъстериране, интеграция с бази от

данни, NoSQL. Отличава се с възможността за скалиране. Най-популярното

решение за търсене.

Написан е на Java и се изпълнява като самостоятелен сървър за

търсене. Използва Lucene Java библиотеката и има REST интерфейс и JSON

API, което го прави удобен за използване от най-популярните езици за 3 Методи от статистиката и вероятностната теория, които са кръстени на Thomas Bayes

Page 7: Full text search - сравнение между Apache Solr и Elasticsearch

7

програмиране. Благодарение на гъвкавата структура дава възможност за

конфигурация без да се налага да се пише на Java. Apache Lucene и Apache

Solr са заедно проекти на Apache Software Foundation след като двата

проекта са смесват в един през 2010 година. Често срещано е името да се

използва в следния формат Lucene/Solr или Solr/Lucene.

През 2004г. Solr е създадено от Yonik Seeley от CNET Networks

като вътрешен проект, за да разшири възможностите на проект на

компанията, в която работи. Има много голяма и активна общност, която се

състои от компании и разработчици, които допринасят за нови възможности

и работят за отстраняване на бъговете. Solr е интегрирана в много

приложения, включително в Hadoop, MapR. Поддържа стандарти като HTTP

REST-lie API включително XML и JSON поддръжка, за удобство има

клиентски библиотеки за Java, C#, PHP, Python, Ruby и повечето популярни

програмни езици.

Elasticsearch

Elasticsearch е сървър базиран на Lucene. Предоставя

дистрибутиран, сървър за търсене с RESTful уеб интерфейс и JSON

документи, които нямат схема. Разработва се на Java и е проект с отворен

код под Apache License. Вторият по популярност продукт предоставящ

възможност за пълно текстово претърсване.

През 2004 година Shay Banon създава Compass, но когато достига до

момент, в който трябва да пусне третата версия на продукта се вижда, че

трябва да се пренапишат големи части, за да може да се скалират. Затова се

създава нов продукт, който е базиран на JSON през HTTP, правейки го

удобен да се използва от други езици за програмиране освен Java. Така се

Page 8: Full text search - сравнение между Apache Solr и Elasticsearch

8

появява първата версия на Elasticsearch през 2010 година. През 2012 година

се създава компания, която да обслужва продукта. През юни 2014г.

Компанията бележи успех с 70 милиона доходи. Може да се използва за

претърсване на всякакъв тип документи. Дава възможност за скалиране и

добро бързодействие.

Сравнение между Apache Solr и Elasticsearch

Сравнението между двете системи ще бъде направено на база на

няколко основни критерия, които се отличават в източниците и често са

причина за дискусии. Те са, както следва отворен код, статистики и метрики,

стартиране на продукта, бързодействие, наличие на REST API, заявки за

търсене, документация, коментари от разработчици.

Отворен код

Solr и Elasticsearch са базирани на Apache Software License. Всеки,

който иска може да прави промени по кода на Solr. Има гласуване за най-

добри разработчици от целия свят, които получават възможността директно

да преправят части от програмния продукт. Общността е много голяма и

включва не само разработчици, но и много големи компании, които

използват продукта и дават полезна информация и съвети на екипа.

При Elasticsearch кодът на продукта е общо достъпен и всеки, който

има желание може да го разгледа, може да направи предложение за

подобрение, но единствено служители на компанията могат да правят

реалните промени. За разлика от Solr общността е много по-малка и хората,

които имат реални права над разработката на продукта са само част от една

компания.

Page 9: Full text search - сравнение между Apache Solr и Elasticsearch

9

Статистики и метрики

От гледна точка на статистики и двете решения дават достатъчно

информация представена в лесно разбираем вид, но според цялата общност

много повече статистики се дават от Elasticsearch, които представят част от

данните си графично.

Стартиране на продукта

Apache Solr се стартира с една команда като пакетът включва в себе

си ZooKeeper, който автоматично вдига две инстанции като в облачна

система. Целият процес отнема около минута. След стартиране потребителят

може да достъпи административен панел.

Фиг. 2 Изглед към административния панел на Solr

От който много лесно и удобно може да прави настройки по своите

инстанции.

Page 10: Full text search - сравнение между Apache Solr и Elasticsearch

10

Фиг. 3 Стартиране на Elasticsearch

За разлика от Solr, Elasticsearch се стартира за около 10 секунди

като на момента е готов за работа. Няма нужда от допълнителни настройки,

което е една от причините много от потребителите да се залъгват. Те имат

проблеми при скалиране, защото използват стандартните настройки и не са

вникнали в същността на проблема. Конфигурационните файлове са трудни

за поддръжка, защото не позволяват коментари и могат да бъдат в няколко

различни формата за разлика от Solr, където настройките са на едно място и

има възможност за добавяне на коментари. Времето, което потребителя

инвестира в настройката на Solr се отплаща след това.

Бързодействие

Според данните, които са достъпни на този етап в мрежата няма

точни тестове на продуктите, които да са извършени от независими

компании. Смята се, че двете системи са идентични в 95% от случаите, като

5% са за специфични търсения, за които двете могат да имат допълнителни

възможности. Elasticsearch като по-нов продукт по-лесно добавя нови

възможности, защото не се налага да се поддържат много клиенти и кодова

база на повече от 10 години.

Page 11: Full text search - сравнение между Apache Solr и Elasticsearch

11

REST API

Двете системи разполагат с много добри REST APIs, които са

готови за използване. Тъй като Elastic search се появява през 2010г. (времето,

през което REST е изключително популярен) е изграден на тази база и работи

с JSON данни. Затова е предпочитано решение от тази гледна точка спрямо

Solr. Solr предоставя възможности за директно индексиране на файлове през

файлова система и поддържа повече формати за работа, но когато става на

въпрос за уеб и JSON статистиката показва, че клиентите предпочитат

Elasticsearch.

Заявки за търсене

Двете системи са базирани на Apache Lucene и представляват два

различни автомобила с един двигател като всеки има свои подобрения. При

Elastic search има ограничение при изграждане на заявките за търсене, което

на своя страна не присъства в Solr, защото потребителят може да

имплементира на свой ред SearchComponent, чрез който да подобри

търсенето и респективно резултатите, които получава. Съществуват много

професии, свързани с пълнотекстово търсене като една от тях е точно

консултант за Apache Lucene.

Документация

Elasticsearch няма много добра документация, липсват примери,

няма въвеждащ урок, който да покаже на потребителя основните

възможности на системата, а потребителят е често пъти приканван да се

включи към уебинар или уроци на място, за които трябва да заплати. Solr от

друга страна има добра документация, въвеждащ урок и голяма общност,

която постоянно се грижи цялата информация, която е достъпна до

потребителите, да е коректна.

Page 12: Full text search - сравнение между Apache Solr и Elasticsearch

12

Коментари от разработчици

Статистиката показва, че разработчиците, които пишат на Java, C#

предпочитат Solr, a тези, които пишат на Ruby, Javascript избират

Elasticsearch, докато други, които пишат на Python или PHP избират и двете

решения, защото има много добри библиотеки, разработени за връзка със

сървъра.

Заключение

Няма строги правила, които трябва да се следват, когато се решава

кой от двата сървъра да се избере(като се изключи варианта с JSON данни).

Двете решения са близки едно до друго, дават много възможности. На този

етап Solr е все още по-популярен, но Elasticsearch бележи голям скок

последните няколко години. От гледна точка на потребителите появата на

Elasticsearch като конкурентен продукт на Solr е забързало част от бъдещите

промени. В частност за всеки проект трябва да се направи проучване и да се

направи сравнение, защото проектът може да влиза точно в онези 5%, които

клонят повече към едното от двете решения.

Page 13: Full text search - сравнение между Apache Solr и Elasticsearch

13

Библиография

1. Alberto Paro, "ElasticSearch Cookbook", Packt Publishing, 2013

2. Michael McCandless, "Lucene in Action", Manning Publications, 2010

3. http://www.datanami.com/2015/01/22/solr-elasticsearch-question/

4. http://www.quora.com/What-are-the-main-differences-between-ElasticSearch-

Apache-Solr-and-SolrCloud

5. http://www.searchtechnologies.com/elasticsearch-solr-lucene

6. http://lucene.apache.org/solr/quickstart.html

7. https://www.elastic.co/guide/index.html

8. https://lucidworks.com/blog/solr-4-preview/

9. http://db-engines.com/en/ranking/search+engine

10. http://en.wikipedia.org/wiki/Full_text_search