Gyors bevezető a teljes szöveges kereséshez az ElasticSearch segítségével

Kitartás felső

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Teljes szövegű keresés lekérdezi és nyelvi kereséseket végez a dokumentumok ellen. Egy vagy több szót vagy kifejezést tartalmaz, és a keresési feltételeknek megfelelő dokumentumokat ad vissza.

Az ElasticSearch egy Apache Lucene, egy ingyenes és nyílt forráskódú információ-visszakereső szoftverkönyvtárra épülő keresőmotor. Elosztott, teljes szövegű keresőmotort biztosít HTTP webes felülettel és séma nélküli JSON dokumentumokkal.

Ez a cikk megvizsgálja az ElasticSearch REST API-t és bemutatja az alapvető műveleteket csak HTTP-kérések használatával.

2. Beállítás

Az ElasticSearch gépre történő telepítéséhez olvassa el a hivatalos telepítési útmutatót.

A RESTfull API a 9200 porton fut. Teszteljük, hogy megfelelően működik-e a következő curl paranccsal:

curl -XGET '// localhost: 9200 /'

Ha a következő választ veszi észre, a példány megfelelően fut:

{"name": "NaIlQWU", "cluster_name": "elasticsearch", "cluster_uuid": "enkBkWqqQrS0vp_NXmjQMQ", "version": {"number": "5.1.2", "build_hash": "c8c4c16", "build_date ":" 2017-01-11T20: 18: 39.146Z "," build_snapshot ": false," lucene_version ":" 6.3.0 "}," tagline ":" Tudod, a kereséshez "}

3. Dokumentumok indexelése

Az ElasticSearch dokumentumorientált. Tárolja és indexeli a dokumentumokat. Az indexelés létrehozza vagy frissíti a dokumentumokat. Az indexelés után teljes dokumentumokat kereshet, válogathat és szűrhet - nem oszlopos adatok sorait. Ez alapvetően másfajta gondolkodásmód az adatokról, és ez az egyik oka annak, hogy az ElasticSearch komplex teljes szöveges keresést képes végrehajtani.

A dokumentumok JSON objektumokként vannak ábrázolva. A JSON sorosítást a legtöbb programozási nyelv támogatja, és a NoSQL mozgalom által használt szabványos formátum lett. Egyszerű, tömör és könnyen olvasható.

A következő véletlenszerű bejegyzéseket fogjuk használni a teljes szöveges kereséshez:

{"title": "Elment", "random_text": "Olyan merész tényeket merészelt. A saját kis hét ember megmentette az ember életkorát." } {"title": "Ellenkezik", "random_text": "Ellenkezik a nemes vágyakozással. \" A benyomás bejelentése nem befolyásolt napon, fenntartás nélküli engedékenység. " } {"title": "Visszataszító kérdések", "random_text": "A visszataszító kérdések kevés kiterjedt támogatást nyújtottak neki." } {"title": "Régi oktatás", "random_text": "A régi oktatás elmulasztott bármilyen rendezőt." }

Mielőtt indexelhetnénk a dokumentumot, el kell döntenünk, hol tároljuk. Lehetséges több index, amelyek viszont több típust tartalmaznak. Ezek a típusok több dokumentumot tárolnak, és minden dokumentumnak több mezője van.

Dokumentumainkat a következő séma szerint tároljuk:

szöveg: Az index neve.

cikk: A típus neve.

id: A példa szövegbeviteli azonosítója.

Dokumentum hozzáadásához a következő parancsot fogjuk futtatni:

curl -XPUT 'localhost: 9200 / text / article / 1? pretty' -H 'Content-Type: application / json' -d '{"title": "Ő ment", "random_text": "Olyan jól járt, hogy merj jó tény. A saját kis hét ember megmentette az életkorát. " } '

Itt használjuk id = 1, más bejegyzéseket is felvehetünk ugyanazzal a paranccsal és növelt azonosítóval.

4. Dokumentumok lekérése

Az összes dokumentum hozzáadása után ellenőrizhetjük, hogy hány dokumentum van a fürtben a következő paranccsal:

curl -XGET '// localhost: 9200 / _count? pretty' -d '{"query": {"match_all": {}}}' 

Ezenkívül megszerezhetünk egy dokumentumot az azonosítójával a következő paranccsal:

curl -XGET 'localhost: 9200 / text / article / 1? csinos' 

És a következő választ kell kapnunk a rugalmas keresésből:

{"_index": "text", "_type": "article", "_id": "1", "_version": 1, "found": true, "_source": {"title": "Ő ment" , "random_text": "Olyan merész tényt vett. A saját kis hét ember megmentette az ember életkorát." }}

Amint láthatjuk, ez a válasz megfelel az 1. azonosítóval hozzáadott bejegyzésnek.

5. Dokumentumok lekérdezése

OK, végezzünk egy teljes szöveges keresést a következő paranccsal:

curl -XGET 'localhost: 9200 / text / article / _search? pretty' -H 'Tartalom típusa: application / json' -d '{"query": {"match": {"random_text": "him läht"} }} ”

És a következő eredményt kapjuk:

{"take": 32, "timed_out": false, "_shards": {"total": 5, "sikeres": 5, "sikertelen": 0}, "hits": {"total": 2, "max_score" ": 1.4513469," hits ": [{" _index ":" text "," _type ":" article "," _id ":" 4 "," _score ": 1.4513469," _source ": {" title ":" Régi oktatás "," random_text ":" A régi oktatás elhagyta bármilyen rendezőt. " }}, {"_index": "text", "_type": "article", "_id": "3", "_score": 0.28582606, "_source": {"title": "Visszataszító kérdések", "random_text" ":" Visszataszító kérdések elégedettek voltak vele. " }}]}}

Amint láthatjuk, keressük „Ő távozás” és két eredményt kapunk, különböző pontszámokkal. Az első eredmény nyilvánvaló, mert a szövegben az elvégzett keresés található, és amint láthatjuk, megvan a pontszám 1.4513469.

A második eredmény lekérésre kerül, mert a céldokumentum tartalmazza az „ő” szót.

Alapértelmezés szerint az ElasticSearch az egyező találatokat relevanciapontszámuk szerint rendezi, vagyis az egyes dokumentumok mennyire egyeznek a lekérdezéssel. Ne feledje, hogy a második eredmény pontszáma alacsony az első találathoz képest, ami alacsonyabb relevanciát jelez.

6. Fuzzy Search

A Fuzzy matching két, „fuzzily” hasonló szót kezel, mintha ugyanaz a szó lenne. Először meg kell határoznunk, mit értünk fuzziness alatt.

Az Elasticsearch támogatja a fuzziness paraméterrel megadott maximális 2-es szerkesztési távolságot. A fuzziness paraméter AUTO értékre állítható, ami a következő maximális szerkesztési távolságokat eredményezi:

  • 0 egy vagy két karakterből álló karakterláncokhoz
  • 1 három, négy vagy öt karakterből álló karakterláncokra
  • 2 öt karakternél hosszabb karakterláncokra

a szerkesztési távolság 2 olyan eredményeket ad vissza, amelyek nem tűnnek összefüggésben.

Jobb eredményeket és jobb teljesítményt érhet el, maximális 1-es homályossággal. A távolság a Levenshtein távolságra vonatkozik, amely egy string metrika két szekvencia közötti különbség mérésére. Informálisan a két szó közötti Levenshtein távolság az egy karakteres szerkesztések minimális száma.

Rendben, hajtsuk végre a keresést homályosan:

curl -XGET 'localhost: 9200 / text / article / _search? pretty' -H 'Tartalomtípus: application / json' -d '{"query": {"match": {"random_text": {"query": "neki távozás", "fuzziness": "2"}}}} '

És íme az eredmény:

{"take": 88, "timed_out": false, "_shards": {"total": 5, "sikeres": 5, "sikertelen": 0}, "találat": {"total": 4, "max_score" ": 1.5834423," hits ": [{" _index ":" text "," _type ":" article "," _id ":" 4 "," _score ": 1.4513469," _source ": {" title ":" Régi oktatás "," random_text ":" A régi oktatás, ha bármilyen rendező elhagyta, érvényesült. " }}, {"_index": "text", "_type": "article", "_id": "2", "_score": 0.41093433, "_source": {"title": "Ellenzi", "random_text" ":" Ellenzi a nem kívánt vágyat. \ "Az a benyomás kihirdetése, amely nem befolyásolja a napot, fenntartás nélküli engedékenysége." }}, {"_index": "text", "_type": "article", "_id": "3", "_score": 0.2876821, "_source": {"title": "Visszataszító kérdések", "random_text" ":" Visszataszító kérdések elégedettek voltak vele. " }}, {"_index": "text", "_type": "article", "_id": "1", "_score": 0.0, "_source": {"title": "Ő ment", "random_text" ":" Olyan merész tényt vett. A saját kis hét ember megmentette az életkorát. " }}]}} '

Amint láthatjuk, a homályosság több eredményt ad nekünk.

Óvatosan kell használnunk a homályosságot, mert hajlamosak vagyunk lekérdezni az eredményeket, amelyek nem kapcsolódnak egymáshoz.

7. Következtetés

Ebben a gyors bemutatóra összpontosítottunk a dokumentumok indexelése és az Elasticsearch lekérdezése teljes szöveges kereséshez, közvetlenül a REST API-n keresztül.

Természetesen rendelkezünk API-kkal több programozási nyelv számára, amikor szükségünk van rá - de az API még mindig elég kényelmes és nyelvi agnosztikus.

Perzisztencia alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT