Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę manipulować trafnością wyszukiwania pełnotekstowego MySQL, aby jedno pole było bardziej „wartościowe” niż inne?

Utwórz trzy indeksy pełnotekstowe

  • a) jeden w kolumnie słów kluczowych
  • b) jeden w kolumnie treści
  • c) po jednym w kolumnie słów kluczowych i treści

Następnie Twoje zapytanie:

SELECT id, keyword, content,
  MATCH (keyword) AGAINST ('watermelon') AS rel1,
  MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC

Chodzi o to, że rel1 zapewnia trafność zapytania tylko w keyword kolumna (ponieważ utworzyłeś indeks tylko w tej kolumnie). rel2 robi to samo, ale dla content kolumna. Możesz teraz dodać te dwie oceny trafności razem, stosując dowolną wagę.

Jednak nie używasz żadnego z tych dwóch indeksów do rzeczywistego wyszukiwania. W tym celu użyj trzeciego indeksu, który znajduje się w obu kolumnach.

Indeks (słowo kluczowe, treść) kontroluje przywoływanie. Aka, co jest zwracane.

Dwa oddzielne indeksy (jeden tylko dla słowa kluczowego, drugi tylko dla treści) kontrolują trafność. Tutaj możesz zastosować własne kryteria ważenia.

Zwróć uwagę, że możesz użyć dowolnej liczby różnych indeksów (lub zmieniać indeksy i wagi używane w czasie zapytania w oparciu o inne czynniki, być może ... szukaj słowa kluczowego tylko wtedy, gdy zapytanie zawiera słowo stopu ... zmniejsz obciążenie wagowe dla słowa kluczowe, jeśli zapytanie zawiera więcej niż 3 słowa... itd.

Każdy indeks zajmuje miejsce na dysku, więc więcej indeksów, więcej dysku. I z kolei większy ślad pamięci dla mysql. Ponadto wstawianie zajmie więcej czasu, ponieważ masz więcej indeksów do zaktualizowania.

Powinieneś porównywać wydajność (uważając, aby wyłączyć pamięć podręczną zapytań mysql w celu przeprowadzenia testów porównawczych, w przeciwnym razie wyniki będą przekrzywione) w swojej sytuacji. To nie jest wydajne w Google, ale jest dość łatwe i „niestandardowe” i prawie na pewno jest o wiele lepsze niż użycie „lubię to” w zapytaniach.

Uważam, że to działa naprawdę dobrze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podłączanie Visual COBOL do MySQL

  2. Jak naprawić „MySQL ERROR 1819 (HY000):” w systemie Linux?

  3. Kod błędu 1292 - Obcięta niepoprawna PODWÓJNA wartość - Mysql

  4. Kiedy używać MyISAM i InnoDB?

  5. Jak wyświetlić znaki UTF-8 w phpMyAdmin?