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

Omezení fulltextového indexování Mysql?

To určitě ne!

Jakýkoli hledaný výraz složený čistě z blokovaných slov tiše selže. Slova mohou být blokována kvůli omezení minimální/maximální délky a/nebo souboru ignorovaných slov.

Zjistil jsem, že výchozí soubor ignorovaných slov je příliš agresivní, zabraňoval mnoha platným vyhledáváním. Také výchozí minimální délka 4 byla velmi často vhodná pro zkratky, které by lidé mohli chtít hledat. Snížil jsem ft_min_word_len na 3 a stoplist jsem úplně odstranil (ft_stopword_file=''). Dokument:http://dev.mysql.com /doc/refman/5.1/cs/fulltext-fine-tuning.html

Můžete také prozkoumat vyhledávací dotaz a zjistit, zda obsahuje pouze <4písmenná slova, a v takovém případě se vrátit k vyhledávání LIKE. Neexistuje žádný tak snadný způsob, jak obejít stoplist na úrovni aplikace.

Výběr „slovních znaků“ nemusí vyhovovat vašim potřebám a je obtížné jej změnit. Například hledání „Terry“ nebude odpovídat „Terry's“. Obecně neexistuje žádná podpora pro jakýkoli druh odvození, takže „biscuit“ nebude odpovídat ani „biscuits“.

Konečně, jak bylo zmíněno cg, neexistuje žádná podpora pro InnoDB. V dnešní době nechcete všechna svá data ukládat do tabulky MyISAM.

Pokud máte volné úložiště, můžete vložit hlavní kanonickou verzi dat do tabulky InnoDB a poté vytvořit samostatnou tabulku MyISAM, která obsahuje kopii obsahu volného textu, čistě pro použití jako návnada pro vyhledávání. Při změně musíte aktualizovat obě tabulky, ale pokud tabulka MyISAM ztratí integritu, ztratíte alespoň možnost prohledávat příslušné řádky místo toho, abyste hromadili skutečná data a dostávali chyby aplikace.

Pak můžete, pokud máte cyklů nazbyt, implementovat vlastní zpracování textu na vyhledávací návnadu a dotazová slova, abyste obešli některá z výše uvedených omezení. Můžete například escapovat znaky, které chcete, aby byly znaky slova, odstranit znaky, které nechcete, aby byly znaky slova, a provádět jednoduché ruční odvození v angličtině.



  1. Vyberte ze SUM() více sloupců a připojte se k postgreSQL

  2. Postgres:CHYBA:plán uložený v mezipaměti nesmí změnit typ výsledku

  3. Nesprávná hodnota datetime pro funkci str_to_date

  4. Apache Felix nemá přístup k Postgres JDBC