sql >> Databasteknik >  >> RDS >> Mysql

mysql-fråga för att matcha mening mot nyckelord i ett fält

Ett sätt att göra det kan vara att konvertera apple, oranges, pears till apple|oranges|pears och använd RLIKE (dvs reguljärt uttryck) för att matcha det.

Till exempel, "John gillade att äta äpplen" matchar det vanliga uttrycket "äpple|apelsin|päron".

Först, för att konvertera 'äpple, apelsiner, päron' till regex-formen, ersätt alla ', ' med '|' med REPLACE . Använd sedan RLIKE för att välja de sökordsposter som matchar:

SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

Detta beror dock på att din kommaseparation är konsekvent (dvs. om det finns en rad som ser ut som apples,oranges detta fungerar inte som REPLACE ersätter ett kommatecken följt av ett mellanslag (enligt dina exempelrader).

Jag tror inte heller att det kommer att skala upp särskilt bra.

Och om du har en mening som "John gillade att äta ananas", skulle den matcha båda raderna ovan (eftersom den har "äpple" i den). Du kan sedan försöka lägga till ordgränser till det reguljära uttrycket (dvs WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), men detta skulle förstöra matchningen när du har pluralformer ('äpplen' skulle inte matcha '[wordboundary]apple[wordboundary]').



  1. Beställ resultatuppsättning baserat på WHERE IN-satsdata

  2. hur man synkroniserar sqlite till Mysql

  3. Söka efter flera databaser samtidigt

  4. Varbinary vs Blob i MySQL