Bazy danych SQL Wyszukiwanie pełnotekstowe wyklad12

background image

Bazy danych

12. SQL — Wyszukiwanie pełnotekstowe

P. F. Góra

http://th-www.if.uj.edu.pl/zfs/gora/

semestr letni 2007/08

background image

Wyszukiwanie pełnotekstowe

Wyszukiwanie pełnotekstowe słu˙zy do wyszukiwania podanych napisów (ci ˛

agów

znaków) w kolumnach typu CHAR, VARCHAR, TEXT. W tym celu na tabeli, któr ˛

a

chcemy w tens posób przeszukiwa´c, nale˙zy zało˙zy´c 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

background image

Niech przykładowa tabela zawiera nast ˛epuj ˛

ace dane:

mysql> SELECT * FROM Teksty;
+----+----------------------+-------------------------------------------------------+
| Id | Tytul

| Tresc

|

+----+----------------------+-------------------------------------------------------+
|

1 | Prof. Andrzej bim

| Rzepli´

nski, bom, kryminolog: - Nie znam akt

|

|

2 | operacyjnych bim bom | gdzie mog ˛

a by´

c dowody, ale nie mo˙

zemy

|

|

3 | wykluczy´

c,

| ˙

ze XXX bim był milicyjnym agentem.

|

|

4 | Powtórka

| Operacyjnych akt nie znam ja, bim, mówi Rzepli´

nski.

|

|

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

background image

Wyszukiwanie odbywa si ˛e poprzez wywołanie zapytania SELECT z klauzul ˛

a

WHERE MATCH(

nazwy kolumn) AGAINST(wzorzec)

.

mysql> SELECT * FROM TEKSTY

-> WHERE MATCH (Tytul,Tresc) AGAINST(’operacyjnych’);

+----+----------------------+--------------------------------------------------------+
| Id | Tytul

| Tresc

|

+----+----------------------+--------------------------------------------------------+
|

5 | Bim

| Operacyjnych, operacyjnych, operacyjnych, milicyjnych. |

|

6 | Bim bim

| akt operacyjnych

|

|

4 | Powtórka

| Operacyjnych akt nie znam ja, bim, mówi Rzepli´

nski.

|

|

2 | operacyjnych bim bom | gdzie mog ˛

a by´

c dowody, ale nie mo˙

zemy

|

+----+----------------------+--------------------------------------------------------+
4 rows in set (0.00 sec)

12. Wyszukiwanie pełnotekstowe

4

background image

Warto´s´c semantyczna

Wyra˙zenie MATCH...AGAINST(wzorzec) okre´sla

warto´s´c semantyczn ˛

a

poda-

nego 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´

nski, bom, kryminolog: - Nie znam akt |

0

|

|

2 | operacyjnych bim bom gdzie mog ˛

a by´

c dowody, ale nie mo˙

zemy

| 0.38341854994499 |

|

3 | wykluczy´

c, ˙

ze XXX bim był milicyjnym agentem.

|

0

|

|

4 | Powtórka Operacyjnych akt nie znam ja, bim, mówi Rzepli´

nski.

| 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

background image

Warto´s´c semantyczna wzorca w wierszu

• jest tym wi ˛eksza, im wi ˛ecej razy wzorzec wyst ˛epuje w wierszu,

• jest tym wi ˛eksza, im wiersz jest krótszy,

• przyjmuje warto´s´c zero, je´sli wzorzec

nie

wyst ˛epuje w wierszu.

Uwaga: Warto´s´c semantyczna wyrazów krótkich lub wyst ˛epuj ˛

acych w co naj-

mniej 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´swietla tylko wier-

sze o niezerowej warto´sci semantycznej.

12. Wyszukiwanie pełnotekstowe

6

background image

Boolowskie wyszukiwanie pełnotekstowe

AGAINST(

wzorzec IN BOOLEAN MODE) pozwala na stosowanie operatorów le-

piej okre´slaj ˛

acych poszukiwany wzorzec. Przy wyszukiwaniu boolowskim tabela

nie musi

mie´c zdefiniowanego indeksu FULLTEXT.

• + — fragment musi by´c obecny, − — fragment nie mo˙ze by´c obecny.

mysql> SELECT * FROM TEKSTY

-> WHERE MATCH (Tytul,Tresc) AGAINST(’+operacyjnych -znam’ IN BOOLEAN MODE);

+----+----------------------+--------------------------------------------------------+
| Id | Tytul

| Tresc

|

+----+----------------------+--------------------------------------------------------+
|

2 | operacyjnych bim bom | gdzie mog ˛

a by´

c dowody, ale nie mo˙

zemy

|

|

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 zawieraj ˛

ace

fragment opcjonalny s ˛

a oceniane wy˙zej.

12. Wyszukiwanie pełnotekstowe

7

background image

• () — nawiasy słu˙z ˛

a do grupowania słów w podwyra˙zenia. Takie grupy mo˙zna

zagnie˙zd˙za´c.

• " — zwrot uj ˛ety w podwójne cudzysłowy powoduje dopasowanie tylko wier-

szy, które zawieraj ˛

a podany zwrot

dokładnie w tej formie, w jakiej został

napisany

.

S ˛

a tak˙ze inne operatory.

12. Wyszukiwanie pełnotekstowe

8

background image

mysql> SELECT * FROM Teksty

-> WHERE MATCH(Tytul,Tresc) AGAINST(’+(akt operacyjnych)’ IN BOOLEAN MODE);

+----+----------------------+--------------------------------------------------------+
| Id | Tytul

| Tresc

|

+----+----------------------+--------------------------------------------------------+
|

2 | operacyjnych bim bom | gdzie mog ˛

a by´

c dowody, ale nie mo˙

zemy

|

|

4 | Powtórka

| Operacyjnych akt nie znam ja, bim, mówi Rzepli´

nski.

|

|

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);

+----+---------+------------------+
| Id | Tytul

| Tresc

|

+----+---------+------------------+
|

6 | Bim bim | akt operacyjnych |

+----+---------+------------------+
1 row in set (0.00 sec)

12. Wyszukiwanie pełnotekstowe

9

background image

Wyszukiwanie z rozwijaniem zapytania

U˙zytkownik bardzo cz ˛esto polega na “wiedzy niejawnej” — człowiek wie, ˙ze ja-
kie´s terminy s ˛

a równoznaczne lub bliskoznaczne, ale jak to zalgorytmizowa´c?

Powiedzmy, szukaj ˛

ac wzorca “daza danych”, chcemy te˙z uzyska´c wiersze za-

wieraj ˛

ace napisy “Oracle” i “MySQL”, nawet je´sli napis “baza danych” w nich

nie

wyst ˛epuje. Albo te˙z szukaj ˛

ac informacji o profesorze, chcemy tek˙ze znale´z´c

wiersze, w których profesor wymieniony jest z nazwiska, z pomini ˛eciem tytułu.

Realizujemy to za pomoc ˛

a konstrukcji AGAINST(wzorzec WITH QUERY

EXPANSION)

. W takim wypadku tabela przeszukiwana jest dwa razy. Przy dru-

gim wyszukiwaniu wzorzec zostaje poł ˛

aczony z kilkoma innymi wzorcami, znaj-

duj ˛

acymi w wierszach b ˛ed ˛

acych na górze (maj ˛

acych najwi ˛eksz ˛

a warto´s´c se-

mantyczn ˛

a

pierwotnego wzorca

) po pierwszym wyszukiwaniu.

12. Wyszukiwanie pełnotekstowe

10

background image

Przykład

mysql> SELECT * FROM TEKSTY

-> WHERE MATCH (Tytul,Tresc) AGAINST(’Prof’);

+----+-------------------+---------------------------------------------+
| Id | Tytul

| Tresc

|

+----+-------------------+---------------------------------------------+
|

1 | Prof. Andrzej bim | Rzepli´

nski, 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);

+----+-------------------+-----------------------------------------------------+
| Id | Tytul

| Tresc

|

+----+-------------------+-----------------------------------------------------+
|

1 | Prof. Andrzej bim | Rzepli´

nski, bom, kryminolog: - Nie znam akt

|

|

4 | Powtórka

| Operacyjnych akt nie znam ja, bim, mówi Rzepli´

nski. |

+----+-------------------+-----------------------------------------------------+
2 rows in set (0.01 sec)

12. Wyszukiwanie pełnotekstowe

11

background image

Uwagi ko ´ncowe

• Wyszukiwanie pełnotekstowe jest wolne i kosztowne.

• Je˙zeli planujemy przeszukiwa´c naprawd ˛e du˙z ˛

a tabel ˛e, zaleca si ˛e

Utworzy´c tabel ˛e bez definiowania indeksu FULLTEX.

Wprowadzi´c dane do tabeli.

Po wprowadzeniu danych oda´c indeks za pomoc ˛

a polecenia ALTER

TABLE

.

W przeciwnym wypadku wprowadzanie danych do tabeli mo˙ze by´c bardzo

powolne.

• Istnieje sporo

komercyjnych

nakładek na RDBMSy, znacznie usprawniaj ˛

a-

cych wyszukiwanie pełnotekstowe.

12. Wyszukiwanie pełnotekstowe

12


Wyszukiwarka

Podobne podstrony:
3 Bazy danych SQL cz 1 wykład
3 Bazy danych SQL cz 2 wykład
3 Bazy danych SQL cz 2 wykład
3 Bazy danych SQL cz 2 wykład
3 Bazy danych SQL cz 1 wykład
BAZY DANYCH SQL (2)
nadpisywanie bazy danych SQL
sciaga - bazy danych, SQL bazy danych
9 Bazy danych Przegląd oprogramowania DBMS wykład
bazy danych sql id 81694 Nieznany
12 Bazy danych Przegląd oprogramowania DBMS wykład
Bazy danych SQL Teoria i praktyka bdsql
sciaga na egzamin (1), Informatyka i Ekonometria SGGW, Semestr 4, Bazy danych SQL, EGZAMiN
BAZY DANYCH SQL (2)
nadpisywanie bazy danych SQL
Bazy danych SQL Teoria i praktyka bdsql
Bazy danych SQL Teoria i praktyka bdsql

więcej podobnych podstron