sql >> Database >  >> RDS >> Mysql

Beperkingen voor het indexeren van volledige tekst in Mysql?

Dat is het zeker niet!

Elke zoekterm die puur uit geblokkeerde woorden bestaat, zal stilletjes mislukken. Woorden kunnen worden geblokkeerd vanwege min/max lengtebeperkingen en/of het stopwoordbestand.

Ik vond het standaard stopwoord-bestand veel te agressief, het verhinderde veel geldige zoekopdrachten. Ook de standaard minimale lengte van 4 kwam heel vaak voor acroniemen waar mensen naar zouden willen zoeken. Ik heb de ft_min_word_len teruggebracht tot 3 en de stoplijst volledig verwijderd (ft_stopword_file=''). Doc:http://dev.mysql.com /doc/refman/5.1/en/fulltext-fine-tuning.html

U kunt ook de zoekopdracht onderzoeken om te zien of deze slechts <4-letterwoorden bevat en in dat geval terugvallen op een LIKE-zoekopdracht. Er is niet zo'n gemakkelijke manier om de stoplijst te omzeilen op applicatieniveau.

De selectie van 'woordtekens' voldoet mogelijk niet aan uw behoeften, en het is lastig om te veranderen. Zoeken naar "Terry" komt bijvoorbeeld niet overeen met "Terry's". Over het algemeen is er geen ondersteuning voor enige vorm van stammen, dus "biscuit" komt ook niet overeen met "biscuits".

Ten slotte is er, zoals cg al zei, geen ondersteuning voor InnoDB. In deze tijd wil je niet al je gegevens in een MyISAM-tabel zetten.

Als u de opslagruimte over heeft, kunt u de belangrijkste, canonieke versie van de gegevens in een InnoDB-tabel plaatsen en vervolgens een afzonderlijke MyISAM-tabel maken die een kopie van de vrije tekstinhoud bevat, puur voor gebruik als zoekaas. U moet beide tabellen bijwerken bij een wijziging, maar als de MyISAM-tabel integriteit verliest, verliest u in ieder geval alleen de mogelijkheid om over de betreffende rijen te zoeken, in plaats van de echte live gegevens op te sommen en toepassingsfouten te krijgen.

U kunt dan, als u de cycli over heeft, uw eigen tekstverwerking op het zoekaas en de zoektermen implementeren om een ​​aantal van de bovenstaande beperkingen te omzeilen. U kunt bijvoorbeeld tekens laten ontsnappen waarvan u wilt dat ze woordtekens zijn, tekens verwijderen waarvan u niet wilt dat ze woordtekens zijn, en eenvoudige handmatige Engelse stemming uitvoeren.



  1. Somwaarden van een enkele rij?

  2. Eenvoudig ALS.. Anders.. mysql-query

  3. Alternatief voor django.db.close_connection()

  4. Verbinding maken met een Oracle-database Verbinding vanuit .Net Core