sql >> Databasteknik >  >> RDS >> Mysql

hur använder man Fuzzy look up för att hitta meningen i SQL?

Det här är ingen enkel fråga. Det bästa är att använda någon typ av fulltextsökning . Fulltextsökning kan konfigureras för att ha stoppord (ord som utelämnas från sökningen - som ordet the ) och kan också ha en minsta ordlängdsgräns (ord med mindre än vissa tecken långa utelämnas också från sökningen.

Men om du bara använder

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

Då kommer MySQL att returnera inte bara posten med det värde du letade efter, utan posterna som bara har några av orden, och i annan ordning. Den du visade kommer förmodligen att vara en av de högst rankade, men det finns ingen garanti för att den kommer att vara högst rankad.

Du kanske vill använda boolesk fulltextsökning och infoga + till varje sökord för att tvinga MySQL att endast returnera de poster som innehåller alla sökord:

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

Men, on bör antingen vara ett stoppord (det finns på standardlistordslistorna) eller bör vara kortare än den minsta ordlängden, så bör utelämnas från sökuttrycket (du får inga resultat):

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

Jag vet att detta kräver ändring av sökuttrycket, men detta ger dig de bästa resultaten med MySQL:s inbyggda funktionalitet.

Alternativet är att använda andra fulltextsökmotorer, såsom sfinx för att utföra sökningen åt dig.



  1. Hur renderar man postgresql-resultat i ejs med nod pg?

  2. Läs data från SqlDataReader

  3. Hur sammanfogar man text från flera rader till en enda textsträng i Oracle-servern?

  4. Sammanfoga data från 5 tabeller utan dubbletter av värden och få resultat med anpassad status i Oracle 10g