Onderzoeksdocument voor zoekmachineselectie
Introductie tot Elasticsearch*
Elasticsearch is een realtime gedistribueerde zoek- en analyse-engine. Het helpt je om grootschalige data sneller dan ooit tevoren te verwerken.
Het kan worden gebruikt voor full-text zoekopdrachten, gestructureerd zoeken en analytics, en natuurlijk kun je ze alle drie combineren.
Elasticsearch is een zoekmachine gebouwd op de full-text zoekmachine Apache Lucene™, die kan worden beschouwd als het meest geavanceerde en efficiënte volledig uitgeruste open source zoekmachineframework dat vandaag de dag beschikbaar is.
Maar Lucene is slechts een framework, en om optimaal gebruik te maken van de functies, moet je JAVA gebruiken en Lucene integreren in je programma. Het kost veel leren om te begrijpen hoe het werkt, en Lucene is echt ingewikkeld.
Elasticsearch gebruikt Lucene als interne engine, maar bij het gebruik voor full-text search hoef je alleen een uniforme API te gebruiken zonder de complexe Lucene-werkingsprincipes erachter te begrijpen.
Natuurlijk is Elasticsearch niet zo eenvoudig als Lucene, het bevat niet alleen full-text zoekfuncties, maar kan ook de volgende taken uitvoeren:
- Gedistribueerde realtime bestandsopslag en indexeren elk veld zodat het doorzocht kan worden.
- Gedistribueerde zoekmachine met realtime analyses.
- Het kan opschalen naar honderden servers om petabytes aan gestructureerde of ongestructureerde data te verwerken.
Met zoveel functies geïntegreerd in één server kun je eenvoudig communiceren met ES's RESTful API via de client of een van je favoriete programmeertalen.
Beginnen met Elasticsearch is heel eenvoudig. Het gaat gepaard met veel zeer redelijke standaardinstellingen, wat het een goede manier maakt voor beginners om te voorkomen dat ze meteen met complexe theorieën te maken krijgen.
Het is geïnstalleerd en klaar voor gebruik, en het kan zeer productief zijn met een kleine leerkosten.
Naarmate je meer leert, kun je ook gebruikmaken van meer geavanceerde functies van Elasticsearch, en kan de hele engine flexibel worden geconfigureerd. Je kunt je eigen Elasticsearch aanpassen naar jouw behoeften.
Gebruiksscenario's:
- Wikipedia gebruikt Elasticsearch om volledige tekstzoekopdrachten te doen en trefwoorden te markeren, evenals zoeksuggesties zoals zoek-als-je-typt en 'bedoel je'.
- The Guardian gebruikt Elasticsearch om bezoekerslogboeken te verwerken, zodat redacteuren in realtime op de hoogte kunnen worden van publieke reacties op verschillende artikelen.
- StackOverflow combineert full-text search met geolocatie en relevante informatie om een weergave te bieden van vragen die hierop lijken.
- GitHub gebruikt Elasticsearch om meer dan 130 miljard regels code op te halen.
- Elke dag gebruikt Goldman Sachs het om 5TB aan data te indexeren, en veel investeringsbanken gebruiken het om bewegingen op de aandelenmarkt te analyseren.
Maar Elasticsearch is niet alleen voor grote ondernemingen, het heeft ook veel startups zoals DataDog en Klout geholpen hun capaciteiten uit te breiden.
Voor- en nadelen van Elasticsearch**:
verdienen
- Elasticsearch is verspreid. Er zijn geen andere componenten nodig, en distributie is realtime, bekend als "Push-replicatie".
- Elasticsearch ondersteunt volledig bijna realtime zoeken met Apache Lucene.
- Het afhandelen van multitenancy vereist geen speciale configuratie, terwijl Solr meer geavanceerde instellingen vereist.
- Elasticsearch gebruikt het concept van Gateway om het makkelijker te maken om back-ups te maken.
- Elke node vormt een gelijke netwerkstructuur, en wanneer sommige nodes falen, worden andere nodes automatisch toegewezen om in hun plaats te werken.
gebrek
- Slechts één ontwikkelaar (de huidige Elasticsearch GitHub-organisatie is er meer, ze heeft al vrij actieve beheerders)
- Niet automatisch genoeg (niet geschikt voor de huidige nieuwe Index Warmup API)
Over Solr*
Solr (uitgesproken als "solar") is een open-source enterprise searchplatform voor het Apache Lucene-project. De belangrijkste functies zijn full-text zoekopdracht, hitmarking, gefacetteerde zoekfunctie, dynamische clustering, database-integratie en verwerking van rich text (bijv. Word, PDF). Solr is zeer schaalbaar en biedt gedistribueerde zoek- en indexreplicatie. Solr is de populairste zoekmachine voor enterprise-klassen, en Solr4 voegt ook NoSQL-ondersteuning toe.
Solr is een zelfstandige, full-text zoekserver geschreven in Java die draait op een servlet-container zoals Apache Tomcat of Jetty. Solr gebruikt de Lucene Java zoekbibliotheek als kern voor full-text indexering en zoeken, en beschikt over REST-achtige HTTP/XML- en JSON-API's. De krachtige externe configuratiemogelijkheden van Solr maken het eenvoudig om zich aan te passen aan veel soorten applicaties zonder Java-codering. Solr heeft een plugin-architectuur om geavanceerdere aanpassingen te ondersteunen.
Door de fusie van de Apache Lucene- en Apache Solr-projecten in 2010 werden de twee projecten opgezet en geïmplementeerd door hetzelfde ontwikkelingsteam van de Apache Software Foundation. Als het gaat om technologie of producten, is Lucene/Solr of Solr/Lucene hetzelfde.
Voor- en nadelen van Solr:
verdienen
- Solr heeft een grotere en meer volwassen gemeenschap van gebruikers, ontwikkelaars en bijdragers.
- Ondersteuning voor het toevoegen van indexen in meerdere formaten, zoals HTML, PDF, Microsoft Office-softwareformaten en platte tekstformaten zoals JSON, XML, CSV, enzovoort.
- Solr is relatief volwassen en stabiel.
- Zoeken tijdens indexeren wordt niet meegenomen, en de snelheid is sneller.
gebrek
- Wanneer de index is opgezet, neemt de zoekefficiëntie af en is de realtime indexzoekefficiëntie niet hoog.
Elasticsearch versus Solr*
Solr is sneller bij het simpelweg zoeken naar bestaande data.
Bij het indexeren in realtime veroorzaakt Solr IO-blokkering en slechte queryprestaties, wat Elasticsearch duidelijk voordeel heeft.
Naarmate de hoeveelheid data toeneemt, wordt de zoekefficiëntie van Solr lager, terwijl Elasticsearch niet significant verandert.
Samengevat is de architectuur van Solr niet geschikt voor realtime zoektoepassingen.
Productietesten in de praktijk*
De onderstaande figuur toont een 50x toename in gemiddelde zoeksnelheid na de overstap van Solr naar Elasticsearch.
Samenvatting van de vergelijking tussen Elasticsearch en Solr
- Beide zijn eenvoudig te installeren;
- Solr maakt gebruik van Zookeeper voor gedistribueerd beheer, terwijl Elasticsearch zelf gedistribueerd orkestratiebeheer heeft;
- Solr ondersteunt meer dataformaten, terwijl Elasticsearch alleen JSON-bestandsformaten ondersteunt;
- Solr biedt officieel meer functies, terwijl Elasticsearch zelf zich meer richt op kernfuncties, en geavanceerde functies worden vooral geleverd door plugins van derden.
- Solr presteert beter dan Elasticsearch in traditionele zoekapplicaties, maar is aanzienlijk minder efficiënt dan Elasticsearch bij het verwerken van realtime zoekapplicaties.
- Solr is een krachtige oplossing voor traditionele zoekapplicaties, maar Elasticsearch is beter geschikt voor opkomende realtime zoektoepassingen.
Andere open source zoekmachineoplossingen uit Lucene*
1: Gebruik Lucene direct
Opmerking: Lucene is een MAJVA-zoekbibliotheek die op zichzelf geen volledige oplossing is en extra ontwikkelingsinspanningen vereist.
Voordelen: Volwassen oplossing met veel succesvolle zaken. Apache topprojecten die zich snel blijven ontwikkelen. Grote en actieve ontwikkelcommunity, een groot aantal ontwikkelaars. Het is gewoon een klassenbibliotheek, met voldoende ruimte voor aanpassing en optimalisatie: na eenvoudige aanpassing kan het aan de meeste veelvoorkomende behoeften voldoen; Geoptimaliseerd om 1 miljard+ zoekopdrachten te ondersteunen.
Nadelen: Vereist extra ontwikkelingsinspanning. Alle schaalverdeling, distributie, betrouwbaarheid, enzovoort moet zelf worden geïmplementeerd; In niet-real-time is er een tijdsvertraging tussen indexeren en zoeken, en de schaalbaarheid van het huidige "Lucene Near Real Time search"-zoekschema moet verder worden verbeterd
De hyperlink-login is zichtbaar.
2:Katta
Opmerking: Lucene-gebaseerd ondersteuningssysteem voor gedistribueerd, schaalbaar, fouttolerant, bijna real-time zoekschema.
Voordelen: Uit de doos gedistribueerd met Hadoop. Het heeft een schaal- en fouttolerantiemechanisme.
Nadelen: Het is gewoon een zoekoplossing, en je moet het indexeringsgedeelte nog steeds zelf implementeren. Wat betreft zoekfunctie worden alleen de meest basale behoeften vervuld. Er zijn minder succesverhalen en de volwassenheid van het project is iets lager. Omdat het distributie moet ondersteunen, zal het moeilijk zijn om het aan te passen aan sommige complexe query-vereisten.
De hyperlink-login is zichtbaar.
3:Hadoop-bijdrage/index
Opmerking: Map/Reduce-modus, een gedistribueerde indexeringsoplossing, kan worden gebruikt met Katta.
Voordelen: Gedistribueerde indexering en schaalbaarheid.
Nadelen: Alleen het indexeringsschema, niet de zoekimplementatie. Werkt in batchmodus met slechte ondersteuning voor realtime zoeken.
De hyperlink-login is zichtbaar.
4: LinkedIn's open-source oplossing
Beschrijving: Een reeks oplossingen gebaseerd op Lucene, waaronder Zoie voor bijna realtime zoeken, Bobo voor facetzoeken, Decomposer voor machine learning-algoritmen, Krati voor samenvattingsrepositories, Sensei voor databaseschema-wrapping, en meer
Voordelen: Bewezen oplossing die gedistribueerde, schaalbare en uitgebreide functionaliteitsimplementatie ondersteunt.
Nadelen: Te nauw verbonden met LinkedIn en slechte aanpassingsmogelijkheden
De hyperlink-login is zichtbaar.
5:Lucandra
Opmerking: Op basis van Lucene bestaat de index in de cassandra-database
Voordelen: Kijk naar de voordelen van Cassandra
Nadelen: Verwijs naar de nadelen van Cassandra. Ook is dit slechts een demo en is niet grondig geverifieerd
De hyperlink-login is zichtbaar.
6:HBasene
Opmerking: Op basis van Lucene bestaat de index in de HBase-database
Voordelen: Zie de voordelen van HBase
Nadelen: Zie de nadelen van HBase. Ook worden in de implementatie lucene-termen opgeslagen als rijen, maar de postlijsten die bij elke term horen, worden als kolommen opgeslagen. Naarmate het aantal postlijsten voor één term toeneemt, zal de snelheid van de zoekopdracht sterk worden beïnvloed
De hyperlink-login is zichtbaar.
7: Xunsearch
Opmerking: Xunsearch hanteert een gestructureerd hiërarchisch ontwerp, inclusief back-end services en front-end ontwikkelpakketten, met duidelijke hiërarchieën en zonder intersectie. De backend is een daemon geschreven in C/C++, terwijl de frontend PHP gebruikt, de populairste scripttaal, wat handiger is voor webzoekprojecten. Voor details, zie Architectuurontwerp.
De hyperlink-login is zichtbaar.
|