Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да реализирам просто търсене в сайта с php и mySQL?

Всички предлагат пълнотекстово търсене на MySQL, но трябва да сте наясно с ОГРОМНО предупреждение. Пълнотекстовата търсачка е достъпна само за машината MyISAM (не InnoDB, която е най-често използваната машина поради нейната референтна цялост и съответствие с ACID).

Така че имате няколко опции:

1. Най-простият подход е описан от Дървото на частиците . Можете всъщност да получите класирани търсения от чист SQL (без пълен текст, без нищо). SQL заявката по-долу ще търси в таблица и ще класира резултатите въз основа на броя на поява на низ в полетата за търсене:

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

редактира примера си, за да предостави малко повече яснота

Вариации на горната SQL заявка, добавяне на изрази WHERE (WHERE p.body LIKE '%whatever%you%want') и т.н. вероятно ще ви осигурят точно това, от което се нуждаете.

2. Можете да промените схемата на вашата база данни, за да поддържате пълен текст. Често това, което се прави, за да се запази референтната цялост на InnoDB, съответствието с ACID и скоростта, без да се налага да се инсталират плъгини като Sphinx Fulltext Search Engine за MySQL е да раздели данните за цитатите в собствената си таблица. По принцип ще имате таблица Quotes, която е таблица на InnoDB, която вместо да имате вашето TEXT поле "data", имате препратка "quote_data_id", която сочи към идентификатора на таблица Quote_Data, която е таблица MyISAM. Можете да направите своя пълен текст в таблицата MyISAM, да се присъедините към идентификаторите, върнати с вашите InnoDB таблици и воаля, имате вашите резултати.

3. Инсталирайте Sphinx . Успех с този.

Предвид това, което описахте, бихСИЛНО препоръчвам ви да използвате първия подход, който представих, тъй като имате прост сайт, управляван от база данни. Първото решение е просто, свършва работата бързо. Lucene ще бъде кучка за настройка, особено ако искате да го интегрирате с базата данни, тъй като Lucene е предназначен главно да индексира файлове, а не бази данни. Персонализираното търсене в сайтове с Google просто кара вашия сайт да загуби много репутация (прави ви да изглеждате аматьорски и хакнат), а пълният текст на MySQL най-вероятно ще ви накара да промените схемата на базата си от данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете карта на сайта с помощта на PHP и MySQL

  2. Mysql Дублиращи се редове (Дублиране е открито с помощта на 2 колони)

  3. MySQL TEXT срещу BLOB срещу CLOB

  4. PHP PDO SQL връща само един ред данни вместо всички редове

  5. запитвайте таблица всяка секунда за известяване. Добра практика ли е?