sql >> Databáze >  >> RDS >> Mysql

Jak bych implementoval jednoduché vyhledávání na webu pomocí php a mySQL?

Všichni navrhují fulltextové vyhledávání v MySQL, ale měli byste si být vědomi VELKÉ výhrady. Fulltextový vyhledávač je dostupný pouze pro motor MyISAM (nikoli InnoDB, který je nejběžněji používaným motorem kvůli své referenční integritě a souladu s ACID).

Máte tedy několik možností:

1. Nejjednodušší přístup popisuje Particle Tree . Můžete skutečně získat hodnocená vyhledávání z čistého SQL (žádný fulltext, nic). Dotaz SQL níže prohledá tabulku a seřadí výsledky na základě počtu výskytů řetězce ve vyhledávacích polích:

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

upravili svůj příklad, aby byl trochu jasnější

Variacemi na výše uvedený SQL dotaz, přidáním příkazů WHERE (WHERE p.body LIKE '%whatever%you%want') atd. pravděpodobně získáte přesně to, co potřebujete.

2. Schéma databáze můžete upravit tak, aby podporovalo plný text. Často se dělá to, co se dělá pro udržení referenční integrity InnoDB, shody s ACID a rychlosti, aniž by bylo nutné instalovat pluginy jako Sphinx Fulltext Search Engine pro MySQL je rozdělit data citací do vlastní tabulky. V podstatě byste měli tabulku Quotes, která je tabulkou InnoDB, která místo toho, abyste měli pole TEXT "data", máte odkaz "quote_data_id", který ukazuje na ID v tabulce Quote_Data, což je tabulka MyISAM. Můžete vytvořit svůj plný text v tabulce MyISAM, spojit ID vrácená s vašimi tabulkami InnoDB a voila máte své výsledky.

3. Nainstalovat Sphinx . Hodně štěstí s tímto.

Vzhledem k tomu, co jste popsal, bych VELMI doporučujeme vám použít první přístup, který jsem představil, protože máte jednoduchý web řízený databází. První řešení je jednoduché, práci zvládne rychle. Lucene bude svině nastavovat, zvláště pokud jej chcete integrovat s databází, protože Lucene je určen hlavně k indexování souborů, nikoli databází. Vlastní vyhledávání stránek Google jen způsobí, že vaše stránky ztratí tuny reputace (vypadáte amatérsky a hacknuti) a fulltext MySQL s největší pravděpodobností způsobí, že změníte schéma databáze.



  1. Jak zajistím, aby databáze MySQL běžela zcela v paměti?

  2. Rekurzivní MySQL získá všechny potomky od rodičů

  3. Neo4j - Import dat ze souboru CSV pomocí Cypher

  4. Jaký je rozdíl mezi utf8_unicode_ci a utf8_unicode_520_ci