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

Najlepszy sposób na ważone wyszukiwanie w wielu polach w mysql?

Prawdopodobnie takie podejście do wyszukiwania ważonego / wyników jest dla Ciebie odpowiednie:

SELECT *,
    IF(
            `name` LIKE "searchterm%",  20, 
         IF(`name` LIKE "%searchterm%", 10, 0)
      )
      + IF(`description` LIKE "%searchterm%", 5,  0)
      + IF(`url`         LIKE "%searchterm%", 1,  0)
    AS `weight`
FROM `myTable`
WHERE (
    `name` LIKE "%searchterm%" 
    OR `description` LIKE "%searchterm%"
    OR `url`         LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20

Używa podzapytania Select do podania wagi do uporządkowania wyników. W tym przypadku przeszukiwane są trzy pola, można określić wagę każdego pola. Jest prawdopodobnie tańszy niż unii i prawdopodobnie jest jednym z szybszych sposobów tylko w zwykłym MySQL.

Jeśli masz więcej danych i potrzebujesz szybszych wyników, możesz rozważyć użycie czegoś takiego jak Sphinx lub Lucene.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. za pomocą mysql_close()

  2. Python:ValueError:nieobsługiwany znak formatu ''' (0x27) w indeksie 1

  3. ORDER BY RAND() alternatywa

  4. Zwracanie „ostatniego” wiersza każdego „grupuj według” w MySQL

  5. Konwertuj DateTime w C# na format rrrr-MM-dd i zapisz go w MySql DateTime Field