Bevezetés a tavaszi adatok elasztikus kutatásába

1. Áttekintés

Ebben az oktatóanyagban feltárjuk a Spring Data Elasticsearch alapjait kódközpontú és gyakorlati módon.

Megmutatjuk, hogyan kell indexelni, keresni és lekérdezni az Elasticsearch-et egy Spring alkalmazásban a Spring Data Elasticsearch segítségével. A Spring Data Elasticseach egy Spring modul, amely a Spring Data-t valósítja meg, így lehetőséget kínálva a népszerű nyílt forráskódú, Lucene-alapú keresővel való interakcióra.

Míg az Elasticsearch nehezen definiált sémával is képes működni, bevett gyakorlat egy ilyen megtervezése és hozzárendelések létrehozása, amelyek meghatározzák az egyes mezőkben várható adatok típusát. Ha egy dokumentum indexelésre kerül, a mezők típusuk szerint kerülnek feldolgozásra. Például egy szövegmező tokenizálva lesz, és a leképezési szabályok szerint leszűrve. Készíthetnénk saját szűrőket és tokenizátorokat is.

Az egyszerűség kedvéért mégis dokkoló képet használunk az Elasticsearch példányunkhoz minden Elasticsearch példány hallgat a 9200-as porton.

Először az Elasticsearch példányunk feltöltésével kezdjük:

docker run -d --name es762 -p 9200: 9200 -e "discovery.type = single-node" rugalmas keresés: 7.6.2

2. Tavaszi adatok

A Spring Data segít elkerülni a kazánlap kódját. Például, ha definiálunk egy repository interfészt, amely kiterjeszti a ElasticsearchRepository felületet a Spring Data Elasticsearch biztosítja, A megfelelő dokumentumosztály CRUD műveletei alapértelmezés szerint elérhetővé válnak.

Ezenkívül egyszerűen a módszerek névvel történő előre meghatározott formátumban történő deklarálásával a módszer megvalósításai generálódnak számunkra - nincs szükség a tárház felületének megvalósításának megírására.

A Baeldung tavaszi adatokról szóló útmutatói tartalmazzák a lényeget a téma elindításához.

2.1. Maven-függőség

A Spring Data Elasticsearch Java API-t biztosít a keresőmotorhoz. Használatához új függőséget kell adnunk a pom.xml:

 org.springframework.data spring-data-elasticsearch 4.0.0.FELHASZNÁLÁS 

2.2. Adattár interfészek meghatározása

Az új adattárak meghatározása érdekében kibővítjük az egyik rendelkezésre álló tárhely-interfészt, az általános típusokat lecseréljük a tényleges dokumentum- és elsődleges kulcs típusainkra.

Fontos megjegyezni ElasticsearchRepository -tól terjed PagingAndSortingRepository. Ez lehetővé teszi a lapozás és a rendezés beépített támogatását.

Példánkban a lapozás funkciót az egyéni keresési módszereinkben fogjuk használni:

nyilvános felület ArticleRepository kiterjeszti az ElasticsearchRepository {Page findByAuthorsName (karakterlánc neve, lapozható lapozható); @Query ("{\" bool \ ": {\" must \ ": [{\" match \ ": {\" author.name \ ": \"? 0 \ "}}]}}}" ") page findByAuthorsNameUsingCustomQuery (Karakterlánc neve, lapozható lapozható); }

A ... val findByAuthorsName metódust, az adattár proxy létrehoz egy megvalósítást a metódus neve alapján. A felbontási algoritmus meghatározza, hogy hozzáférnie kell-e a szerzői tulajdonságot, majd keresse meg a név az egyes elemek tulajdonságai.

A második módszer, findByAuthorsNameUsingCustomQuery, egy egyedi Elasticsearch logikai lekérdezést használ, amelyet a @Lekérdezés annotáció, amely szigorú egyezést igényel a szerző neve és a megadott között név érv.

2.3. Java konfiguráció

Az Elasticsearch Java alkalmazásban történő konfigurálásakor meg kell határoznunk, hogyan kapcsolódunk az Elasticsearch példányhoz. Ehhez a RestHighLevelClient amit az Elasticsearch függőség kínál:

@Configuration @EnableElasticsearchRepositories (basePackages = "com.baeldung.spring.data.es.repository") @ComponentScan (basePackages = {"com.baeldung.spring.data.es.service"}) public class Config {@Bean public RestHighLevel kliens () {ClientConfiguration clientConfiguration = ClientConfiguration.builder () .connectedTo ("localhost: 9200") .build (); return RestClients.create (clientConfiguration) .rest (); } @Bean public ElasticsearchOperations elasticsearchTemplate () {return new ElasticsearchRestTemplate (client ()); }}

Normál tavaszi stílusú stílusjegyzetet használunk. @EnableElasticsearchRepositories a Spring Data Elasticsearch segítségével áttekinti a Spring Data-tárolók számára biztosított csomagot.

Az Elasticsearch szerverrel való kommunikációhoz egy egyszerűt használunk RestHighLevelClient. Míg az Elasticsearch többféle klienst nyújt, a RestHighLevelClient egy jó módszer a szerverrel folytatott kommunikáció jövőbiztosítására.

Végül létrehoztunk egy ElasticsearchOperations babot a műveletek végrehajtására a szerverünkön. Ebben az esetben példányosítunk egy ElasticsearchRestTemplate.

3. Térképek

A leképezéseket a dokumentumok sémájának meghatározására használják. A dokumentumok sémájának definiálásával megvédjük őket a nem kívánt eredményektől, például egy olyan típushoz való hozzárendeléstől, amelyet nem szeretnénk.

Egységünk egy egyszerű dokumentum, amelynek neve Cikk hol a id típusú Húr. Azt is meghatározzuk, hogy az ilyen dokumentumokat egy megnevezett indexben kell tárolni blog belül cikk típus.

@Document (indexName = "blog", type = "cikk") public class Article {@Id private String id; privát húr cím; @Field (type = FieldType.Nested, includeInParent = true) privát lista szerzői; // szabványos mérőeszközök és beállítók}

Az indexeknek több típusa lehet. Használhatjuk ezt a funkciót hierarchiák megvalósításához.

A szerzői mező a következővel van megjelölve: FieldType.Nested. Ez lehetővé teszi számunkra a Szerző osztály külön, de a szerző egyedi példányait be kell ágyazni egy Cikk dokumentum, amikor indexeli az Elasticsearch alkalmazásban.

4. Dokumentumok indexelése

A Spring Data Elasticsearch általában indexeket hoz létre automatikusan a projekt entitásai alapján. Az indexet azonban programszerűen is létrehozhatjuk az ügyfélsablonon keresztül:

elasticsearchTemplate.indexOps (cikk.osztály) .create ();

Ezután hozzáadhatunk dokumentumokat az indexhez:

Cikkcikk = új cikk ("Spring Data Elasticsearch"); article.setAuthors (asList (új Szerző ("John Smith"), új Szerző ("John Doe"))); articleRepository.save (cikk);

5. Lekérdezés

5.1. Módszer névalapú lekérdezés

A metódusnév-alapú lekérdezés használatakor metódusokat írunk, amelyek meghatározzák a végrehajtani kívánt lekérdezést. A beállítás során a Spring Data elemzi a metódus aláírását, és ennek megfelelően hozza létre a lekérdezéseket:

String nameToFind = "John Smith"; Page articleByAuthorName = ArticleRepository.findByAuthorsName (névToFind, PageRequest.of (0, 10));

Hívással findByAuthorsName val,-vel PageRequest objektumot, megkapjuk az eredmények első oldalát (az oldalszámozás nulla alapú), az oldal legfeljebb 10 cikket tartalmaz. Az oldalobjektum a lekérdezés teljes találatainak számát is megadja, más praktikus oldalszámozási információk mellett.

5.2. Egyéni lekérdezés

Párféleképpen határozhatja meg az egyéni lekérdezéseket a Spring Data Elasticsearch tárakhoz. Az egyik mód a @Lekérdezés kommentár, amint azt a 2.2. szakasz mutatja.

Egy másik lehetőség az, hogy a lekérdezés készítővel létrehozzuk az egyéni lekérdezésünket.

Olyan cikkeket kell keresni, amelyeken szerepel aadat”Címben csak létrehozhatnánk a NativeSearchQueryBuilder szűrővel a cím:

Query searchQuery = new NativeSearchQueryBuilder () .withFilter (regexpQuery ("title", ". * Data. *")) .Build (); SearchHits cikkek = elasticsearchTemplate.search (searchQuery, Article.class, IndexCoordinates.of ("blog");

6. Frissítés és törlés

A dokumentum frissítéséhez először be kell szereznünk:

String articleTitle = "Spring Data Elasticsearch"; Query searchQuery = new NativeSearchQueryBuilder () .withQuery (matchQuery ("title", articleTitle) .minimumShouldMatch ("75%")) .build (); SearchHits articles = elasticsearchTemplate.search (searchQuery, Article.class, IndexCoordinates.of ("blog"); Article Article = articles.getSearchHit (0) .getContent ();

Ezután csak úgy módosíthatjuk a dokumentumot, hogy az értékelők segítségével szerkesztjük az objektum tartalmát:

article.setTitle ("Első lépések a keresőmotorokkal"); articleRepository.save (cikk);

Ami a törlést illeti, számos lehetőség van. A dokumentum segítségével lekérhetjük és törölhetjük töröl módszer:

articleRepository.delete (cikk);

Által is törölhetjük id amikor ismert:

articleRepository.deleteById ("cikk_id");

Lehetőség van egyedi létrehozására is deleteBy lekérdezéseket és használja az Elasticsearch által kínált tömeges törlés funkciót:

articleRepository.deleteByTitle ("cím");

7. Következtetés

Ebben az oktatóanyagban azt kutattuk, hogyan lehet összekapcsolni és kihasználni a Spring Data Elasticsearch alkalmazást. Megbeszéltük, hogyan tudunk lekérdezni, frissíteni és törölni a dokumentumokat. Ezenkívül megvitattuk az egyéni lekérdezések létrehozásának módját is, amelyek nem felelnek meg a Spring Data Elasticsearch által kínáltaknak.

Szokás szerint az oktatóanyagban használt forráskód megtalálható a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found