Co to jest Wyszukiwanie pełnotekstowe vs jak

Właśnie przeczytałem post o "full text search" W SQL.

Zastanawiałam się, jaka jest różnica między FTS a podobnymi. Przeczytałem kilka artykułów, ale nie mogłem znaleźć niczego, co wyjaśniałoby to dobrze.

Author: MPelletier, 2008-10-22

6 answers

Ogólnie rzecz biorąc, istnieje kompromis między "precyzją" i "przypomnieniem". Wysoka precyzja oznacza, że mniej nieistotnych wyników jest prezentowanych (brak fałszywych alarmów), podczas gdy wysoki poziom przywoływania oznacza, że brakuje mniej istotnych wyników (brak fałszywych negatywów). Korzystanie z podobnego operatora zapewnia 100% precyzję bez koncesji na wycofanie. Funkcja wyszukiwania pełnotekstowego zapewnia dużą elastyczność, aby dostroić precyzję w celu lepszego przywołania.

Większość implementacji wyszukiwania pełnotekstowego używa " odwróconego indeks". Jest to indeks, w którym klucze są indywidualnymi terminami, a powiązane wartości są zestawami rekordów zawierających ten termin. Wyszukiwanie pełnotekstowe jest zoptymalizowane do obliczania przecięcia, Unii itp. tych zestawów rekordów i zwykle zapewnia algorytm rankingowy, aby określić, jak mocno dany rekord pasuje do słów kluczowych wyszukiwania.

Operator podobny do SQL może być bardzo nieefektywny. Jeśli zastosujesz go do nieindeksowanej kolumny, Pełne skanowanie będzie używane do wyszukiwania dopasowań (tak jak każde zapytanie na nieindeksowane pole). Jeśli kolumna jest zindeksowana, dopasowanie może być wykonane z kluczami indeksu, ale z znacznie mniejszą wydajnością niż większość wyszukiwarek indeksów. W najgorszym przypadku podobny wzór będzie miał wiodące symbole wieloznaczne, które wymagają zbadania każdego klucza indeksu. W przeciwieństwie do tego, wiele systemów wyszukiwania informacji może umożliwić obsługę wiodących symboli wieloznacznych poprzez wstępną kompilację drzew sufiksów w wybranych polach.

Inne cechy typowe dla wyszukiwania pełnotekstowego to

  • analiza leksykalna lub tokenizacja-łamanie a blok tekstu niestrukturalnego na poszczególnych słów, zwrotów i specjalne żetony
  • morfologiczne analiza, czyli zmiany steming-collapsing danego słowa w jeden termin indeksowy; na przykład, leczenie "myszy" i "Myszka", czyli "elektryfikacja" i "electric" jako to samo słowo
  • ranking-mierzenie podobieństwo zapisu dopasowującego do ciąg zapytania
 132
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 10:17:24

FTS polega na indeksowaniu poszczególnych słów w polu tekstowym w celu szybkiego przeszukiwania wielu rekordów. Korzystanie z funkcji LIKE nadal wymaga przeszukiwania ciągu znaków (liniowego lub podobnego) w obrębie pola.

 36
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 07:04:44

Like używa tylko symboli wieloznacznych i nie jest aż tak potężny.

Pełny tekst pozwala na znacznie bardziej złożone wyszukiwanie, w tym i, lub, nie, nawet podobne wyniki brzmiące (SOUNDEX) i wiele innych elementów.

Chciałbym zacząć patrzeć na SQL CONTAINS () FREETEXT () i powiązane pozycje wyszukiwania pełnotekstowego, aby pomóc lepiej zrozumieć, co jest dostępne.

 15
Author: Mitchel Sellers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 07:05:11

MySQL tworzy indeks ze słów włączonej kolumny wyszukiwania pełnotekstowego i wykonuje wyszukiwanie na tym indeksie. MySQL wykorzystuje zaawansowany algorytm do określania wierszy dopasowanych do zapytania.

Jest kilka zalet wyszukiwania pełnotekstowego.

Indeksowanie:

Coś w stylu:

Gdzie Foo jak '% Bar'; Nie można skorzystać z indeksu. Musi spojrzeć na każdy rząd i sprawdzić, czy pasuje. Indeks pełnotekstowy może jednak W fakt, indeksy pełnotekstowe mogą oferować o wiele większą elastyczność pod względem kolejności dopasowywania słów, jak blisko te słowa są ze sobą, itp.

Stemming:

Wyszukiwanie pełnotekstowe może zawierać słowa. Jeśli szukasz run, możesz uzyskać wyniki dla "ran" lub "running". Większość silników fulltext posiada słowniki stem w różnych językach.

Wyniki Ważone:

Indeks pełnotekstowy może obejmować wiele kolumn. Na przykład możesz wyszukać " ciasto brzoskwiniowe", indeks może zawierać tytuł, słowa kluczowe i treść. Wyniki pasujące do tytułu mogą być ważone wyżej, jako bardziej istotne, i mogą być sortowane, aby pokazać w pobliżu góry.

Wady:

Indeks pełnotekstowy może być potencjalnie ogromny, wielokrotnie większy niż standardowy indeks drzewa B. Z tego powodu wielu dostawców hostowanych, którzy oferują instancje bazy danych, wyłącza tę funkcję lub przynajmniej pobiera za nią dodatkowe opłaty. Na przykład, ostatnio sprawdzałem, Windows Azure nie obsługuje fulltext zapytania.

Indeksy pełnotekstowe mogą być również wolniejsze w aktualizacji. Jeśli dane ulegną zmianie a lot, mogą wystąpić pewne opóźnienia w stosunku do standardowych indeksy.

 14
Author: Vipin Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 06:42:15

Prawdziwą różnicą są metodyki skanowania. W przypadku wyszukiwania pełnotekstowego słowa (terminy) są używane jako klucze skrótu - z których każdy jest powiązany z tablicą dokumentów, w których pojawiają się klucze (terminy). To tak:

Document sets = {d1, d2, d3, d4, ... dn}
Term sets = {t1, t2, t3, .. tn}

Teraz macierz term-dokumentu (który członek termu danego dokumentu) może być reprezentowana jako:

t1 -> {d1, d5, d9,.. dn}
t2 -> {d11, d50, d2,.. dn}
t3 -> {d23, d67, d34,.. dn}
:
tn -> {d90, d87, d57,.. dn}

Gdy pojawi się żądanie z prośbą o "Get me all documents containing the word / term t1" - wtedy zwracany jest zestaw dokumentów {d1, d5, d9,.. dn}.

You could zhakuj znormalizowany schemat tabeli do przechowywania dokumentów - każdy wiersz w tabeli MySQL będzie uważany za" dokument", a Kolumna tekstowa może zawierać akapit itp. Odwrócony indeks będzie zawierał terminy jako klucze skrótu, a identyfikatory wierszy jako identyfikatory dokumentów.

Pamiętaj, że to zapytanie SQL będzie miało mniej więcej wydajność O(1). Zapytanie będzie niezależne od

  1. liczba słów / terminów w kolumnie tekstowej
  2. liczba wierszy / dokumentów pasujących do kryteria
  3. długość słów / terminów

Na przykład ten SQL może być wywołany, aby wyodrębnić wszystkie wiersze pasujące do podanego słowa XYZ:

SELECT * 
FROM   my_table 
WHERE  MATCH (my_text_column) against ('XYZ' IN boolean mode) ;

Zastrzeżenie: jeśli dodasz ORDER BY do tego zapytania, Twoje czasy uruchamiania będą się różnić w zależności od kilku parametrów, z których jednym jest liczba pasujących wierszy / dokumentów. Więc uważaj.

Podobne jednak nie ma nic z tego. Jest on zmuszony do liniowego skanowania zdania / ciągu I znalezienia wszystkich pasujących terminów. Dodanie dzikiej karty dodaje do bałagan. Działa świetnie dla ciągów o małej długości, jak można sobie wyobrazić, ale zawiedzie nędznie dla dłuższych zdań. I zdecydowanie nie porównywalne, gdy ma akapit lub całą stronę tekstu itp.

 9
Author: Kingz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-01 05:04:35

FTS jest bardziej wydajny ,wydajny (szczególnie dla łamaczy słów i funkcji steming) ... ale sprawdź swoje wymagania, ponieważ czasami DBs nie obsługuje wszystkich języków, na przykład MSSQL nie obsługuje greckiego (sprawdź na tej stronie http://msdn.microsoft.com/en-us/library/ms176076(v=sql. 110). aspx )

 3
Author: kamskyleo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-09 15:13:22