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ć?
Odpowiedz
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.
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
Innymi słowy, jeśli szukasz dokładnego dopasowania do całego łańcucha, indeks FULLTEXT jest niewłaściwy w użyciu? – aroth
@Arth przy wyszukiwaniu całej zawartości kolumny indeks pełnotekstowy nie byłby wcale korzystny, tak. – Alex
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.
- 1. Co to jest bajt datatype i kiedy powinienem go użyć?
- 2. Co to jest NHibernate i dlaczego powinienem go używać?
- 3. Jak odbudować indeks pełnotekstowy?
- 4. co to jest Request.InputStream i kiedy go użyć?
- 5. Co to jest Manifest w Scali i kiedy go potrzebujesz?
- 6. Co to jest pyximport i jak mam go używać?
- 7. Co to jest SAPI i kiedy go użyjesz?
- 8. Co to jest __declspec i kiedy należy go użyć?
- 9. Co to jest Ninject i kiedy go używasz?
- 10. co to jest MVVM i czy powinniśmy go używać?
- 11. Co to jest protokół TDS w wersji 8.0 i dlaczego powinienem go używać?
- 12. Co to jest funkcja "zewnętrzna inline" i kiedy używać?
- 13. Co to jest metoda Javascript CollectGarbage()? Kiedy i dlaczego powinno się go używać?
- 14. Co to jest "zadanie" (proces potomny) w systemie Windows i kiedy go używać?
- 15. Co to jest std :: decay i kiedy powinno się go używać?
- 16. Co to jest typ złożony w strukturze encji i kiedy go używać?
- 17. WCF - kiedy powinienem używać netTcpBinding
- 18. C# USING keyword - kiedy i kiedy go nie używać?
- 19. Co to jest sekwencja (baza danych)? Kiedy będziemy go potrzebować?
- 20. Skąd wiesz, co to jest dobry indeks?
- 21. Jaki jest cel ROWLOCK przy kasowaniu i kiedy powinienem go używać?
- 22. Co to jest indeks wielu kluczy?
- 23. Co to jest indeks w SQLite?
- 24. Co to jest automatyczny indeks pokrywający?
- 25. Co to jest err. (* Os.PathError) w Go?
- 26. Google App Engine - kiedy go używać, gdy nie jest?
- 27. kiedy używać zadania i kiedy używać wątku?
- 28. Co to jest wyrównanie danych? Dlaczego i kiedy powinienem się martwić, gdy wskaźniki literowania w C?
- 29. Co to są komponenty a-la-carte? Czy powinienem go używać?
- 30. Co to jest usługa serwisowa i kiedy jej potrzebuję?
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"? –