Full text searching on tsvector fields for use with postgraphile-plugin-connection-filter
npm install @pyramation/postgraphile-plugin-fulltext-filter

tsvector columns in PostGraphile v4 via @mattbretl's excellent postgraphile-plugin-connection-filter plugin.`` bash`
postgraphile --append-plugins postgraphile-plugin-connection-filter,postgraphile-plugin-fulltext-filter
See here for
more information about loading plugins with PostGraphile.
` js
const express = require('express');
const { postgraphile } = require('postgraphile');
const PostGraphileConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
const PostGraphileFulltextFilterPlugin = require('postgraphile-plugin-fulltext-filter');
const app = express();
app.use(
postgraphile(pgConfig, schema, {
appendPlugins: [
PostGraphileConnectionFilterPlugin,
PostGraphileFulltextFilterPlugin,
],
})
);
app.listen(5000);
`
All tsvector columns that aren't @omit'd should have indexes on them:
` sql`
ALTER TABLE posts ADD COLUMN full_text tsvector;
CREATE INDEX full_text_idx ON posts USING gin(full_text);
This plugin adds the matches filter operator to the filter plugin, accepting@@
a GraphQL String input and using the operator to perform full-text searchestsvector
on columns.
This plugin uses pg-tsquery to parse the
user input to prevent Postgres throwing on bad user input unnecessarily.
For each tsvector column, a rank column will be automatically added to the Rank
GraphQL type for the table by appending to the end of the column's name.full_text
For example, a column will appear as fullText in the GraphQL type,fullTextRank
and a second column, will be added to the type as a Float.
This rank field can be used for ordering and is automatically added to the orderBy
enum for the table.
` graphql``
query {
allPosts(
filter: {
fullText: { matches: 'foo -bar' }
}
orderBy: FULL_TEXT_RANK_DESC
}) {
...
fullTextRank
}
}