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

jak použít Fuzzy look up k nalezení věty v SQL?

To není jednoduchá otázka. Nejlepším řešením je použít nějaký typ fulltextové vyhledávání . Fulltextové vyhledávání lze nakonfigurovat tak, aby obsahovalo ignorovaná slova (slova, která jsou z vyhledávání vynechána – jako slovo the ) a může mít také limit minimální délky slova (slova kratší než určité znaky jsou z vyhledávání také vynechány.

Pokud však jednoduše použijete

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');

Poté MySQL vrátí nejen záznam s hodnotou, kterou jste hledali, ale také záznamy, které obsahují pouze některá slova, a to v různém pořadí. Ten, který jste ukázali, bude pravděpodobně jeden z nejvýše hodnocených, ale není zaručeno, že bude nejvýše hodnocený.

Možná budete chtít použít Booleovské fulltextové vyhledávání a přidat + na každé hledané slovo, aby MySQL vrátilo pouze ty záznamy, které obsahují všechna hledaná slova:

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);

Ale on by mělo být buď ignorované slovo (je na výchozích seznamech klíčových slov), nebo by mělo být kratší než minimální délka slova, takže by mělo být z vyhledávacího výrazu vynecháno (nezískáte zpět žádné výsledky):

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);

Vím, že to vyžaduje úpravu vyhledávacího výrazu, ale díky vestavěné funkcionalitě MySQL získáte nejlepší výsledky.

Alternativou je použití jiných fulltextových vyhledávačů, jako je sfinga k provedení vyhledávání za vás.



  1. mysql jak převést varchar (10) na TIMESTAMP?

  2. Jak nastavit hodnotu na NULL při použití Zend_Db

  3. Jak udělit všechna oprávnění k databázi v MySQL

  4. Prohledávání dat Microsoft Access pomocí Elasticsearch