sql >> Database >  >> RDS >> Mysql

Hoe zorg je ervoor dat je Fulltext Booleaanse zoekopdracht de term C++ oppikt?

Je zult MySQL's idee van wat een woord is, moeten veranderen.

Ten eerste is de standaard minimale woordlengte 4. Dit betekent dat geen enkele zoekterm die alleen woorden van <4 letters bevat ooit zal overeenkomen, of dat nu 'C++' of 'cpp' is. U kunt dit configureren met behulp van de ft_min_word_len configuratieoptie, bijv. in uw my.cfg:

[mysqld]
ft_min_word_len=3

(Stop/start vervolgens MySQLd en herbouw de volledige tekstindexen.)

Ten tweede wordt '+' door MySQL niet als een letter beschouwd. Je kunt er een letter van maken, maar dat betekent dat je niet kunt zoeken op het woord 'vis' in de string 'vis+chips', dus enige voorzichtigheid is geboden. En het is niet triviaal:het vereist het opnieuw compileren van MySQL of het hacken van een bestaande tekenset. Zie het gedeelte dat begint met "Als u de reeks tekens wilt wijzigen die als woordtekens worden beschouwd..." in sectie 11.8.6 van het document.

Ja, zoiets is een veelvoorkomende oplossing:u kunt uw 'echte' gegevens (zonder te ontsnappen) in een primaire, definitieve tabel bewaren - meestal met InnoDB voor ACID-compliance. Dan kan een aanvullende MyISAM-tabel worden toegevoegd, die alleen de verminkte woorden bevat voor fulltext zoekaas. Je kunt met deze aanpak ook een beperkte vorm van stammen uitvoeren.

Een andere mogelijkheid is om zoekopdrachten te detecteren die MySQL niet kan, zoals die met alleen korte woorden of ongebruikelijke tekens, en terug te vallen op een eenvoudige maar langzame LIKE- of REGEXP-zoekopdracht voor alleen die zoekopdrachten. In dit geval wil je waarschijnlijk ook de stoplijst verwijderen door ft_stopword_file naar een lege string, aangezien het niet praktisch is om alles daarin ook als speciaal op te pikken.



  1. Databasestructuur met dynamische velden

  2. Postgres:hoe rond je een tijdstempel naar boven of beneden af ​​op de dichtstbijzijnde minuut?

  3. Een overzicht van cluster-naar-clusterreplicatie

  4. Werken met niet-ASCII JDBC-gegevens in Talend