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

Jak zaimplementować proste wyszukiwanie witryny za pomocą php i mySQL?

Wszyscy sugerują wyszukiwanie pełnotekstowe MySQL, jednak powinieneś być świadomy OGROMNEGO zastrzeżenia. Wyszukiwarka pełnotekstowa jest dostępna tylko dla silnika MyISAM (nie InnoDB, który jest najczęściej używanym silnikiem ze względu na jego integralność referencyjną i zgodność z ACID).

Masz więc kilka opcji:

1. Najprostsze podejście przedstawia Drzewo cząstek . Możesz faktycznie uzyskać rankingowe wyszukiwania z czystego SQL (bez pełnego tekstu, bez niczego). Poniższe zapytanie SQL przeszuka tabelę i uszereguje wyniki na podstawie liczby wystąpień ciągu w polach wyszukiwania:

SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

zmodyfikował swój przykład, aby zapewnić nieco większą przejrzystość

Warianty powyższego zapytania SQL, dodanie instrukcji WHERE (WHERE p.body LIKE '%whatever%you%want') itp. prawdopodobnie zapewnią ci dokładnie to, czego potrzebujesz.

2. Możesz zmienić schemat bazy danych, aby obsługiwał pełny tekst. Często robi się, aby zachować integralność referencyjną InnoDB, zgodność z ACID i szybkość bez konieczności instalowania wtyczek, takich jak Sphinx Fulltext Search Engine dla MySQL jest podzielenie danych cytatu na własną tabelę. Zasadniczo masz tabelę Quotes, która jest tabelą InnoDB, która zamiast pola TEXT „data” ma odwołanie „quote_data_id”, które wskazuje na identyfikator tabeli Quote_Data, która jest tabelą MyISAM. Możesz wykonać pełny tekst w tabeli MyISAM, dołączyć identyfikatory zwrócone z tabelami InnoDB i voila, masz swoje wyniki.

3. Zainstaluj Sphinx . Powodzenia z tym.

Biorąc pod uwagę to, co opisałeś, BARDZO zalecam przyjęcie pierwszego podejścia, które przedstawiłem, ponieważ masz prostą witrynę opartą na bazie danych. Pierwsze rozwiązanie jest proste, szybko wykonuje pracę. Lucene będzie suką do skonfigurowania, zwłaszcza jeśli chcesz zintegrować go z bazą danych, ponieważ Lucene jest przeznaczony głównie do indeksowania plików, a nie baz danych. Niestandardowe wyszukiwanie witryn Google sprawia, że ​​Twoja witryna traci mnóstwo reputacji (sprawia, że ​​wyglądasz na amatora i hakera), a pełny tekst MySQL najprawdopodobniej spowoduje zmianę schematu bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL obcina połączony wynik funkcji GROUP_CONCAT

  2. 10 najlepszych praktyk w MySQL

  3. Aby mieć K w stylu Vima na ekranie dla MySQL

  4. Jak usunąć duplikaty w tabeli MySQL?

  5. Jak mogę używać DATE() w Doctrine 2 DQL?