https://github.com/mlipscombe/postgraphile-plugin-fulltext-filter
Full-text filtering in PostGraphile
https://github.com/mlipscombe/postgraphile-plugin-fulltext-filter
Last synced: 6 months ago
JSON representation
Full-text filtering in PostGraphile
- Host: GitHub
- URL: https://github.com/mlipscombe/postgraphile-plugin-fulltext-filter
- Owner: mlipscombe
- License: mit
- Created: 2018-06-26T22:13:07.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-10-03T07:48:33.000Z (over 5 years ago)
- Last Synced: 2025-10-23T02:38:53.406Z (8 months ago)
- Language: JavaScript
- Size: 26.4 KB
- Stars: 39
- Watchers: 1
- Forks: 29
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/postgraphile-plugin-fulltext-filter)
[](https://circleci.com/gh/mlipscombe/postgraphile-plugin-fulltext-filter/tree/master)
# postgraphile-plugin-fulltext-filter
This plugin implements a full text search operator for `tsvector` columns in PostGraphile v4 via @mattbretl's excellent `postgraphile-plugin-connection-filter` plugin.
## Getting Started
### CLI
``` bash
postgraphile --append-plugins postgraphile-plugin-connection-filter,postgraphile-plugin-fulltext-filter
```
See [here](https://www.graphile.org/postgraphile/extending/#loading-additional-plugins) for
more information about loading plugins with PostGraphile.
### Library
``` 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);
```
## Performance
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);
```
## Operators
This plugin adds the `matches` filter operator to the filter plugin, accepting
a GraphQL String input and using the `@@` operator to perform full-text searches
on `tsvector` columns.
This plugin uses [pg-tsquery](https://github.com/caub/pg-tsquery) to parse the
user input to prevent Postgres throwing on bad user input unnecessarily.
## Fields
For each `tsvector` column, a rank column will be automatically added to the
GraphQL type for the table by appending `Rank` to the end of the column's name.
For example, a column `full_text` will appear as `fullText` in the GraphQL type,
and a second column, `fullTextRank` 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.
## Examples
``` graphql
query {
allPosts(
filter: {
fullText: { matches: 'foo -bar' }
}
orderBy: FULL_TEXT_RANK_DESC
}) {
...
fullTextRank
}
}
```