Bazy danych 12. SQL Wyszukiwanie pełnotekstowe

Podobne dokumenty
Bazy danych 9. Indeksowanie

Bazy danych 10. SQL Widoki

Bazy danych 7. SQL podstawy

Język SQL, zajęcia nr 1

Wykład 5. SQL praca z tabelami 2

Bazy danych 6. Klucze obce. P. F. Góra

Wykład 05 Bazy danych

Bazy danych 5. Samozłaczenie SQL podstawy

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Język SQL, zajęcia nr 2

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bazy Danych i Usługi Sieciowe

Bazy danych 4. SQL podstawy. P. F. Góra

Wykład 6. SQL praca z tabelami 3

Wykład 8. SQL praca z tabelami 5

Bazy danych i usługi sieciowe

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Autor: Joanna Karwowska

Podstawy technologii WWW

Bazy danych. Polecenia SQL

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Kurs. Podstawy MySQL

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

Bazy danych 9. SQL Klucze obce Transakcje

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Paweł Rajba

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy danych 7. SQL dalsze możliwości. Grupowanie.

SIECI KOMPUTEROWE I BAZY DANYCH

Widok Connections po utworzeniu połączenia. Obszar roboczy

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Projektowanie systemów baz danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Bazy danych 9. Klucze obce Transakcje

Relacyjne bazy danych. Podstawy SQL

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Programowanie w Ruby

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy danych 11. Kilka przykładów. P. F. Góra

Bazy danych 11. Algorytmy złaczeń. P. F. Góra

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

Bazy danych Język SQL część 1 Wykład dla studentów matem

Bazy danych. dr inż. Arkadiusz Mirakowski

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

SQL/MySQL. Rafał Kern

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Połączenie z bazą danych : mysql h u root -p Enter password: *******

Wykład 4. SQL praca z tabelami 1

BAZA DANYCH SIECI HOTELI

Hurtownia Świętego Mikołaja projekt bazy danych

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Bazy danych Język SQL część 2 Wykład dla studentów matem

Bloki anonimowe w PL/SQL

Relacyjne bazy danych. Podstawy SQL

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wprowadzenie do baz danych

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

PODZAPYTANIE (SUBSELECT)

Struktura drzewa w MySQL. Michał Tyszczenko

Internetowe bazy danych

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Wyzwalacze (triggery) Przykład

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Laboratorium Bazy danych SQL 3 1

Systemy GIS Tworzenie zapytań w bazach danych

Indeksowanie w bazach danych

Bazy danych 4. SQL- podstawy

Język SQL. Rozdział 2. Proste zapytania

SQL :: Data Definition Language

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Instalacja MySQL.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

PODSTAWY BAZ DANYCH. 10. Partycjonowanie tabel i indeksów. 2009/ Notatki do wykładu "Podstawy baz danych"

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Wykład 2. SQL 1 Structured Query Lenguage

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Imię i Nazwisko Data Ocena. Laboratorium 7

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych 7. Klucze obce Transakcje. P. F. Góra

Tuning SQL Server dla serwerów WWW

Oracle PL/SQL. Paweł Rajba.

Intro. I.Wojnicki, ZTB:XML ZTB: XML. Igor Wojnicki. Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie.

Transkrypt:

Bazy danych 12. SQL Wyszukiwanie pełnotekstowe P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2007/08

Wyszukiwanie pełnotekstowe Wyszukiwanie pełnotekstowe służy do wyszukiwania podanych napisów (ciagów znaków) w kolumnach typu CHAR, VARCHAR, TEXT. W tym celu na tabeli, która chcemy w tens posób przeszukiwać, należy założyć specjalny indeks. W MySQL wyszukiwanie pełnotekstowe działa tylko na tabelach typu MyISAM. mysql> CREATE TABLE Teksty -> (Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Tytul VARCHAR(32), -> Tresc VARCHAR(64), -> FULLTEXT(Tytul,Tresc) -> ) ENGINE=MyISAM, CHARSET cp1250; Query OK, 0 rows affected (0.28 sec) 12. Wyszukiwanie pełnotekstowe 2

Niech przykładowa tabela zawiera następujace dane: mysql> SELECT * FROM Teksty; +----+----------------------+-------------------------------------------------------+ +----+----------------------+-------------------------------------------------------+ 1 Prof. Andrzej bim Rzepliński, bom, kryminolog: - Nie znam akt 2 operacyjnych bim bom gdzie mogą być dowody, ale nie możemy 3 wykluczyć, że XXX bim był milicyjnym agentem. 4 Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepliński. 5 Bim Operacyjnych, operacyjnych, operacyjnych, milicyjych. 6 Bim bim akt operacyjnych 7 Bom bim 8 wypełniacz wypełniacz 9 bim wypełniacz 10 wypełniacz bim +----+----------------------+-------------------------------------------------------+ 10 rows in set (0.10 sec) 12. Wyszukiwanie pełnotekstowe 3

Wyszukiwanie odbywa się poprzez wywołanie zapytania SELECT z klauzula WHERE MATCH(nazwy kolumn) AGAINST(wzorzec). mysql> SELECT * FROM TEKSTY -> WHERE MATCH (Tytul,Tresc) AGAINST( operacyjnych ); 5 Bim Operacyjnych, operacyjnych, operacyjnych, milicyjnych. 6 Bim bim akt operacyjnych 4 Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepliński. 2 operacyjnych bim bom gdzie mogą być dowody, ale nie możemy 4 rows in set (0.00 sec) 12. Wyszukiwanie pełnotekstowe 4

Wartość semantyczna Wyrażenie MATCH...AGAINST(wzorzec) określa wartość semantyczna podanego wzorca w poszczególnych wierszach tabeli: mysql> SELECT Id, CONCAT(Tytul,,Tresc) AS Tekst, -> MATCH (Tytul,Tresc) AGAINST( operacyjnych ) AS Wartosc -> FROM Teksty; +----+---------------------------------------------------------------+------------------+ Id Tekst Wartosc +----+---------------------------------------------------------------+------------------+ 1 Prof. Andrzej bim Rzepliński, bom, kryminolog: - Nie znam akt 0 2 operacyjnych bim bom gdzie mogą być dowody, ale nie możemy 0.38341854994499 3 wykluczyć, że XXX bim był milicyjnym agentem. 0 4 Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepliński. 0.38763393589171 5 Bim Operacyjnych, operacyjnych, operacyjnych, milicyjnych. 0.53687456835829 6 Bim bim akt operacyjnych 0.40085528270084 7 Bom bim 0 8 wypełniacz wypełniacz 0 9 bim wypełniacz 0 10 wypełniacz bim 0 +----+---------------------------------------------------------------+------------------+ 10 rows in set (0.00 sec) 12. Wyszukiwanie pełnotekstowe 5

Wartość semantyczna wzorca w wierszu jest tym większa, im więcej razy wzorzec występuje w wierszu, jest tym większa, im wiersz jest krótszy, przyjmuje wartość zero, jeśli wzorzec nie występuje w wierszu. Uwaga: Wartość semantyczna wyrazów krótkich lub występujacych w co najmniej połowie wierszy wynosi zero. mysql> SELECT * FROM TEKSTY -> WHERE MATCH (Tytul,Tresc) AGAINST( bim bom ); Empty set (0.00 sec) Zapytanie SELECT... WHERE MATCH... AGAINST... wyświetla tylko wiersze o niezerowej wartości semantycznej. 12. Wyszukiwanie pełnotekstowe 6

Boolowskie wyszukiwanie pełnotekstowe AGAINST(wzorzec IN BOOLEAN MODE) pozwala na stosowanie operatorów lepiej określajacych poszukiwany wzorzec. Przy wyszukiwaniu boolowskim tabela nie musi mieć zdefiniowanego indeksu FULLTEXT. + fragment musi być obecny, fragment nie może być obecny. mysql> SELECT * FROM TEKSTY -> WHERE MATCH (Tytul,Tresc) AGAINST( +operacyjnych -znam IN BOOLEAN MODE); 2 operacyjnych bim bom gdzie mogą być dowody, ale nie możemy 5 Bim Operacyjnych, operacyjnych, operacyjnych, milicyjnych. 6 Bim bim akt operacyjnych 3 rows in set (0.04 sec) Brak operatora podany fragment jest opcjonalny. Wiersze zawierajace fragment opcjonalny sa oceniane wyżej. 12. Wyszukiwanie pełnotekstowe 7

() nawiasy służa do grupowania słów w podwyrażenia. Takie grupy można zagnieżdżać. " zwrot ujęty w podwójne cudzysłowy powoduje dopasowanie tylko wierszy, które zawieraja podany zwrot dokładnie w tej formie, w jakiej został napisany. Sa także inne operatory. 12. Wyszukiwanie pełnotekstowe 8

mysql> SELECT * FROM Teksty -> WHERE MATCH(Tytul,Tresc) AGAINST( +(akt operacyjnych) IN BOOLEAN MODE); 2 operacyjnych bim bom gdzie mogą być dowody, ale nie możemy 4 Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepliński. 5 Bim Operacyjnych, operacyjnych, operacyjnych, milicyjnych. 6 Bim bim akt operacyjnych 4 rows in set (0.00 sec) mysql> SELECT * FROM Teksty -> WHERE MATCH(Tytul,Tresc) AGAINST( +"akt operacyjnych" IN BOOLEAN MODE); +----+---------+------------------+ +----+---------+------------------+ 6 Bim bim akt operacyjnych +----+---------+------------------+ 1 row in set (0.00 sec) 12. Wyszukiwanie pełnotekstowe 9

Wyszukiwanie z rozwijaniem zapytania Użytkownik bardzo często polega na wiedzy niejawnej człowiek wie, że jakieś terminy sa równoznaczne lub bliskoznaczne, ale jak to zalgorytmizować? Powiedzmy, szukajac wzorca daza danych, chcemy też uzyskać wiersze zawierajace napisy Oracle i MySQL, nawet jeśli napis baza danych w nich nie występuje. Albo też szukajac informacji o profesorze, chcemy tekże znaleźć wiersze, w których profesor wymieniony jest z nazwiska, z pominięciem tytułu. Realizujemy to za pomoca konstrukcji AGAINST(wzorzec WITH QUERY EXPANSION). W takim wypadku tabela przeszukiwana jest dwa razy. Przy drugim wyszukiwaniu wzorzec zostaje połaczony z kilkoma innymi wzorcami, znajdujacymi w wierszach będacych na górze (majacych największa wartość semantyczna pierwotnego wzorca) po pierwszym wyszukiwaniu. 12. Wyszukiwanie pełnotekstowe 10

Przykład mysql> SELECT * FROM TEKSTY -> WHERE MATCH (Tytul,Tresc) AGAINST( Prof ); +----+-------------------+---------------------------------------------+ +----+-------------------+---------------------------------------------+ 1 Prof. Andrzej bim Rzepliński, bom, kryminolog: - Nie znam akt +----+-------------------+---------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM TEKSTY -> WHERE MATCH (Tytul,Tresc) AGAINST( Prof WITH QUERY EXPANSION); +----+-------------------+-----------------------------------------------------+ +----+-------------------+-----------------------------------------------------+ 1 Prof. Andrzej bim Rzepliński, bom, kryminolog: - Nie znam akt 4 Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepliński. +----+-------------------+-----------------------------------------------------+ 2 rows in set (0.01 sec) 12. Wyszukiwanie pełnotekstowe 11

Uwagi końcowe Wyszukiwanie pełnotekstowe jest wolne i kosztowne. Jeżeli planujemy przeszukiwać naprawdę duża tabelę, zaleca się Utworzyć tabelę bez definiowania indeksu FULLTEX. Wprowadzić dane do tabeli. Po wprowadzeniu danych odać indeks za pomoca polecenia ALTER TABLE. W przeciwnym wypadku wprowadzanie danych do tabeli może być bardzo powolne. Istnieje sporo komercyjnych nakładek na RDBMSy, znacznie usprawniaja- cych wyszukiwanie pełnotekstowe. 12. Wyszukiwanie pełnotekstowe 12