2010-09-05 22 views
19

Jak wskazuje tytuł, czym jest indeks pełnotekstowy i kiedy powinienem go użyć?Co to jest indeks pełnotekstowy i kiedy powinienem go używać?

+1

Proszę ponownie sformułować swoje pytanie. Co chcesz wiedzieć? Co rozumiesz przez "kiedy używać pełnotekstowego indeksu" - poza oczywistą odpowiedzią "kiedy planujesz zrobić wyszukiwanie pełnotekstowe"? –

Odpowiedz

13

W bazach danych indeksy są zazwyczaj używane do zwiększenia wydajności przy poszukiwaniu czegoś zdefiniowanego w klauzuli where. Jednak jeśli chodzi o filtrowanie niektórych tekstów, np. z użyciem czegoś takiego jak WHERE TextColumn LIKE '%searchstring%', a następnie wyszukiwania są powolne, ponieważ sposób działania normalnych indeksów baz danych jest zoptymalizowany pod kątem zgodności z "całą zawartością" kolumny, a nie tylko jej części. W szczególności wyszukiwanie LIKE, które zawiera symbole wieloznaczne, nie może korzystać z żadnego rodzaju indeksu.

Jak wspomniano w komentarzu poniżej, MySQL potrzebuje składni MATCH() ... AGAINST do wyszukiwania w pełnotekstowym indeksie; BTW to zależy od dostawcy bazy danych. W MS SQL można użyć CONTAINS, więc należy o tym pamiętać, jeśli planowane jest również wsparcie dla innych baz danych.

Indeksy pełnotekstowe działają lepiej w przypadku zwykłego tekstu, ponieważ są zoptymalizowane dla tego typu kolumn. Bardzo uproszczone: dzielą tekst na słowa i tworzą indeks nad słowami, a nie całym tekstem. Działa to o wiele szybciej podczas wyszukiwania tekstu przy poszukiwaniu określonych słów.

+6

Indeksy FULLTEXT nie będą działały dla klauzul LIKE - będą używane tylko w klauzulach "PORÓWNAJ() ... PRZECIWKO". Klauzule LIKE rozpoczynające się od znaku wieloznacznego "%" nie mogą być skutecznie przyspieszane przez * dowolny * typ indeksu i zawsze będą wolne. Z tego powodu należy unikać tego typu klauzuli LIKE, chyba że filtrowanie już niewielkiej liczby rekordów. – thomasrutter

+2

Innymi słowy, jeśli szukasz dokładnego dopasowania do całego łańcucha, indeks FULLTEXT jest niewłaściwy w użyciu? – aroth

+1

@Arth przy wyszukiwaniu całej zawartości kolumny indeks pełnotekstowy nie byłby wcale korzystny, tak. – Alex

10

Indeks pełnotekstowy to indeks stosowany w bazie danych MySQL do pól tekstowych, w których ma być przeprowadzane wyszukiwanie pełnotekstowe. Wyszukiwanie pełnotekstowe używa składni match(field) against('text'). Jeśli chcesz uruchomić wyszukiwanie pełnotekstowe, musisz mieć indeks pełnotekstowy w kolumnach, w których będziesz go uruchamiał.

Istnieją trzy rodzaje wyszukiwań pełnotekstowych. Zacytuję instrukcję, bo myślę, że mówi to najlepiej:

  • logiczny wyszukiwania interpretuje ciąg wyszukiwania za pomocą przepisów o specjalnego języka zapytań. Ciąg zawiera słowa do wyszukania. To może również zawierać operatorów, którzy podają wymagania takie, że słowo musi być obecne lub nieobecne w pasujących wierszach , lub że powinno być ważone wyższe lub niższe niż zwykle. Typowe słowa, takie jak "some" lub "then", to stopwords i nie pasują, jeśli są obecne w ciągu wyszukiwania. Modyfikator MODE IN BOOLEAN określa wyszukiwanie boolowskie . Więcej informacji można znaleźć w sekcji 11.9.2, "Boolean Full-Text Search".

  • Wyszukiwanie w języku naturalnym interpretuje ciąg wyszukiwania jako frazę w naturalnym języku ludzkim (fraza w dowolnym tekście). Nie ma specjalnych operatorów . Obowiązuje lista stopword . Ponadto słowa, które są obecne w 50% lub więcej wierszy, to uważane za wspólne i nie pasują do siebie. Wyszukiwanie pełnotekstowe jest naturalne wyszukiwane języki, jeśli nie podano modyfikatora .

  • Wyszukiwanie rozszerzeń zapytań jest modyfikacją wyszukiwania w języku naturalnym . Wyszukiwany ciąg służy do sprawdzania języka naturalnego za pomocą . Następnie wyrazy z najbardziej odpowiednich wierszy zwracane przez wyszukiwanie są dodawane do szukanego ciągu znaków i wyszukiwane jest ponownie . Zapytanie zwraca wiersze z drugiego wyszukiwania. Modyfikator EXPANSION WITH QUERY określa zapytanie o rozszerzenie zapytania o numer: . Więcej informacji na temat znajduje się w rozdziale 11.9.3, "Wyszukiwanie pełnotekstowe z zapytaniem Rozszerzenie".

Aby uzyskać więcej informacji popatrzeć na Full Text Search Reference Page.

Powiązane problemy