web-dev-qa-db-fra.com

Recherche plein texte (Postgres) vs Recherche élastique

Lire Requête

Dans Posgres, l'indexation de texte intégral permet de prétraiter les documents et d'enregistrer un index pour une recherche rapide ultérieure. Le prétraitement comprend:

  • Analyser des documents en jetons.

  • Conversion de jetons en lexèmes.

  • Stockage de documents prétraités optimisés pour la recherche.


tsvector type est utilisé dans Postgres pour la recherche plein texte

tsvector type est différent de text type dans les aspects ci-dessous:

  • Élimine le cas. Les lettres majuscules/minuscules sont identiques

  • Supprime les mots vides (et, ou non, elle, lui et des centaines d'autres) - car ces mots ne sont pas pertinents pour la recherche de texte

  • Remplace les synonymes et prend les tiges Word (elephant -> eleph). Dans le catalogue de texte intégral, il n'a pas le mot elephant mais le mot elep.

  • Peut (et devrait) être indexé avec Gist et GIN

  • Classement personnalisé avec poids et ts_rank


Comment la recherche élastique (moteur de recherche) a-t-elle un avantage sur la recherche en texte intégral dans Postgres?

17
overexchange

la recherche en texte intégral et elasticsearch sont toutes deux construites sur la même technologie de base indices inversés donc les performances seront à peu près les mêmes.

FTS va être plus facile à déployer.

ES est livré avec lucene,

si vous voulez lucene avec FTS, cela demandera un effort supplémentaire.

10
Jasen