sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL Zoeken in volledige tekst en verwarring over trigrammen

Ze dienen heel verschillende doelen.

  • Full Text Search wordt gebruikt om documenten te retourneren die overeenkomen met een zoekopdracht van gestemde woorden.
  • Trigrammen geven je een methode om twee strings te vergelijken en te bepalen hoe vergelijkbaar ze eruit zien.

Beschouw de volgende voorbeelden:

SELECT 'cat' % 'cats'; --true

Het bovenstaande retourneert waar omdat 'cat' lijkt veel op 'cats' (zoals gedicteerd door de pg_trgm-limiet).

SELECT 'there is a cat with a dog' % 'cats'; --false

Het bovenstaande retourneert false omdat % zoekt op dezelfde manier tussen de twee hele strings, niet op zoek naar het woord cats binnen de snaar.

SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

Dit retourneert true omdat tsvector de string transformeerde in een lijst met gestemde woorden en een aantal veelvoorkomende woorden negeerde (stopwoorden - zoals 'is' &'a')... en vervolgens gezocht naar de gestemde versie van cats .

Het klinkt alsof je trigrammen wilt gebruiken om automatisch corrigeren uw ts_query maar dat is niet echt mogelijk (in ieder geval niet op een efficiënte manier). Ze weten het niet echt weten een woord is verkeerd gespeld, hoe vergelijkbaar het ook kan zijn met een ander woord. Ze kunnen kan worden gebruikt om een ​​tabel met woorden te doorzoeken om soortgelijke woorden te vinden, zodat u een functie van het type "bedoelde u..." kunt implementeren, maar voor dit woord moet een aparte tabel worden onderhouden met alle woorden die in uw search veld.

Als u een aantal vaak verkeerd gespelde woorden/zinnen heeft waarvan u wilt dat de tekstindex overeenkomt, kunt u de synoniemenwoordenboeken bekijken




  1. Postgres - FATAL:databasebestanden zijn niet compatibel met de server

  2. PostgreSQL:serieel versus identiteit

  3. PostgreSQL VALUES-opdracht uitgelegd

  4. Hoe maak je een PDF-rapport met PL/SQL