A teljes szövegű keresések használata a MySQL-ben – CloudSavvy IT

Avatar Gadam | 2021.03.17. 47 Views 0 Likes 0 Ratings

47 Views 0 Ratings Rate it

[ad_1]

MySQL logó

A teljes szöveges keresés egy olyan adatbázis-technika, amely akkor is beolvassa a rekordokat, ha nem pontosan felelnek meg a keresési feltételeknek. Ez lehetővé teszi a gazdag, természetesebb nyelvű keresést, amely jobban érzi magát.

Az „adatbázis-motor” keresése teljes szöveges kereséssel az „adatbázis”, „motor” vagy „adatbázis-motor” kifejezéseket tartalmazó találatokat jeleníti meg. Ez kiküszöböli a keresési feltételekben rejlő esetleges kétértelműségeket, így továbbra is megjelennek az olyan sorok, mint „Van egy adatbázisom és egy motorom”.

A MySQL-en egyszerű kereséseket lehet végrehajtani a LIKE operátor. Ez nem hatékony és korlátozott a funkcionalitása. A MySQL-nek általában teljes táblázatot kell végeznie a lekérdezésnek megfelelő rekordok azonosítása érdekében.

A teljes szövegű lekérdezések egy speciálisan létrehozott indexet használnak a teljesítmény javítása érdekében. Ez lehetővé teszi a MySQL számára, hogy nyomon tudja követni az adatkészletben szereplő szavakat, megkönnyítve ezzel a természetes nyelv keresését.

A teljes szöveges keresést csak olyan oszlopokkal használhatja, amelyek teljes szövegű indexet tartalmaznak. Használja a FULLTEXT záradék CREATE TABLE utasítások ennek beállításához, amikor beírja az adatbázis-sémát. Használhatja azzal is ALTER TABLE keresési index hozzáadásához a meglévő oszlopokhoz.

CREATE TABLE articles(content TEXT, FULLTEXT (content));
 
ALTER TABLE articles ADD FULLTEXT (content);

A helyben lévő index segítségével készen áll az adatbázis lekérdezésére.

Teljes szövegű keresések használata

A teljes szöveges keresés a-val kezdődik WHERE kikötés. Használod MATCH AGAINST ahelyett LIKE. Meg kell adnia az indexelt oszlopokat az egyezéshez, valamint a keresendő lekérdezést.

SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' IN NATURAL LANGUAGE MODE);

Ez a cikkek teljes szövegű keresését hajtja végre a lekérdezés segítségével database engine. Megadásával IN NATURAL LANGUAGE MODE, A MySQL-t arra utasítják, hogy a lekérdezést szó szerint értelmezze, anélkül, hogy bármilyen módon feldolgozná. Ez az alapértelmezett keresési mód, ha nincs megadva.

Rendezés eredmény relevancia szerint

A teljes szövegű keresés egyik előnye, hogy lehetővé teszi a visszaküldött rekordok relevancia szerinti sorrendjét. Ez nem lehetséges törzsvásárlóval LIKE lekérdezés. Használhatja a MATCH ... AGAINST záradék az SQL részeként SELECT. A visszaküldött virtuális oszlop relevancia pontszámot tartalmaz, 0-tól 1-ig, jelezve, hogy a rekord mennyire egyezik a keresési lekérdezéssel.

SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles ORDER BY relevance DESC

Ez a lekérdezés először a legrelevánsabb eredményeket adja vissza. Ez segít az alkalmazásának megfelelni a felhasználói elvárásoknak arról, hogy a természetes nyelvű keresőrendszerek hogyan teljesítsenek.

A MySQL több tényező értékelésével kiszámítja a keresés szempontjából releváns pontszámokat. Ide tartozik a lekérdezésnek megfelelő rekordok száma, valamint a lekérdezések egyes rekordokban való előfordulásának száma. A lekérdezésnek több pontos egyezéssel járó eredménye magasabb lesz, mint amely csak a lekérdezés egy részét tartalmazza.

Használat során MATCH ... AGAINST a SELECT utasítás, akkor nem kell megismételnie a WHERE kikötés. Manuálisan szűrheti az eredményeket, és csak olyan rekordokat vehet fel, amelyek relevancia pontszáma nem nulla.

SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles WHERE relevance > 0 ORDER BY relevance DESC

Lekérdezés kiterjesztési mód

A természetes nyelv nem az egyetlen támogatott teljes szövegű keresési mód. A lekérdezés bővítési mód egy olyan alternatíva, amely segít kiszélesíteni a keresési eredmények körét. Automatikusan súlyozza a keresési lekérdezést a legrelevánsabb kifejezésekhez.

A kiterjesztett keresés a lekérdezés egyezését tartalmazó rekordok felkutatásával kezdődik. Ezeket a rekordokat ezután ellenőrizzük, hogy meghatározzuk a legrelevánsabb szavakat. Ezután az adatbázis fut egy másik keresést, ezúttal az eredeti lekérdezés helyett a releváns szavakra alapozva. Ez általában azt eredményezi, hogy több rekordot adnak vissza, miközben a relevancia elfogadható mértékű.

Így engedélyezheti a lekérdezés-bővítési módot:

SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' WITH QUERY EXPANSION)

Logikai mód

A végső teljes szöveges keresési mód logikai mód. Ez lehetővé teszi logikai módosítók felvételét a lekérdezésbe. Akkor használhatja ezt az üzemmódot, ha az egyező logika fokozott ellenőrzésére van szüksége.

Megkövetelheti, hogy minden szóban szerepeljen egy szó, ha előtaggal látja el +. Használat - kizárni a szót tartalmazó eredményeket. Egyéb üzemeltetők használható szavak részeinek egyeztetésére, részkifejezések létrehozására és szavak készítésére csökkenteni a relevancia pontszám. Ez utóbbi hasznos lehet a „zaj” kifejezések maszkolásakor. Ha nem ad meg operátort, az implicit módon a szóra lesz hivatkozva a lekérdezésben a OR.

SELECT * FROM articles WHERE MATCH (content) AGAINST ('+data* engine -sqlite' IN BOOLEAN MODE)

Ez a lekérdezés legalább egy szóval kezdődő cikkeket jelenít meg data hol sqlite nem említik. Minden eredmény tartalmazhatja a szót engine.

A logikai mód lehetővé teszi, hogy hatékony kereséseket állítson össze a saját logikája segítségével. Az egyik megjegyzés, hogy nem támogatja a keresési relevancia pontozását. Ez a kompromisszum, amely lehetővé teszi a felhasználók számára, hogy logikai kereséseket végezzenek. Az eredmény rangsorolása nem biztos, hogy megfelel az emberi elvárásoknak.

A MySQL számos teljes szövegű konfigurációs opcióval rendelkezik, amelyek lehetővé teszik a keresés finomhangolását. Íme néhány a legfontosabbak közül.

  • innodb_ft_min_token_size – Beállítja az indexelt kifejezések minimális szóhosszát. Az ennél az értéknél kevesebb karakterrel rendelkező szavak nem kerülnek hozzáadásra az indexhez, így nem tud majd rájuk keresni. Az alapértelmezett érték: 3, amely kizárja a rendkívül elterjedt szavakat, mint pl a, an és I. Ez a beállítás az InnoDB táblákra vonatkozik; használat ft_min_word_len a MyISAM számára.
  • innodb_ft_max_token_size – Hasonlóan innodb_ft_min_token_size, ez állítja be a maximális indexelt szavak hossza. A hosszabb szavak nem lesznek kereshetők. Használat ft_max_word_len a MyISAM táblákhoz.
  • innodb_ft_enable_stopword – Ez a beállítás, alapértelmezés szerint be van kapcsolva, lehetővé teszi annak szabályozását, hogy a MySQL kiszűri-e a „stopwords” szót. A stopszavak nagyon gyakran használt szavak, amelyek indokolatlanul befolyásolhatják a keresési eredményeket. Az alapértelmezett stopword lista 36 gyakori kifejezést tartalmaz.
  • innodb_ft_user_stopword_table – Ezt az értéket beállíthatja egy adatbázis-tábla nevére, amelyből a MySQL-nek kell a forrásszavak listáját forrnia. Ennek a táblának egynek kell lennie VARCHAR oszlop nevű value. Adja hozzá a kulcsszavakat, hogy kizárja rekordként ebben a táblázatban.

Ezek a beállítások általában a MySQL szerver konfigurációs fájljában vannak megadva. A hely platformonként változik; gyakran megtalálható itt: /etc/mysql/my.cnf. A beállítások módosítása után újra kell indítania a MySQL szolgáltatást.

Miután a kiszolgáló biztonsági másolatot készített, állítsa vissza a táblázat teljes szövegű indexeit. Ezt meg kell tennie, hogy az adatok újraindexelésre kerüljenek a jelenlegi konfiguráció segítségével. Ellenkező esetben a korábban indexelt adatok továbbra is felhasználásra kerülnek.

InnoDB tábla reindexeléséhez futtassa OPTIMIZE TABLE my_table. A MyISAM táblákhoz használja REPAIR TABLE my_table QUICK. A keresési indexeket ezután újjáépítik, így a konfigurációs módosítások életbe lépnek.

Összegzés

A MySQL teljes szöveges keresése engedélyezve van a FULLTEXT indexelje a kereshető mezőkhöz. Ezután használja MATCH ... AGAINST a három keresési mód egyikével az eredmények elérése érdekében. A természetes nyelvű lekérdezések egy keresési relevancia pontszámot adnak vissza, amelyet felhasználhat az eredmények rangsorolásához.

A teljes szöveges keresés hatékonyabb keresési magatartást kínál, mint a LIKE nyilatkozat. Sokkal teljesítményesebb is, különösen nagy adatkészleteknél, mivel az összes szöveget előre indexelik.

[ad_2]
Source link