https://github.com/griffio/sqldelight-pgsearch-module-app
sqldelight pg_search module
https://github.com/griffio/sqldelight-pgsearch-module-app
paradedb pgsearch sqldelight
Last synced: about 1 month ago
JSON representation
sqldelight pg_search module
- Host: GitHub
- URL: https://github.com/griffio/sqldelight-pgsearch-module-app
- Owner: griffio
- Created: 2026-04-08T16:19:14.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-04-09T08:39:21.000Z (3 months ago)
- Last Synced: 2026-04-09T10:23:52.002Z (3 months ago)
- Topics: paradedb, pgsearch, sqldelight
- Language: Kotlin
- Homepage:
- Size: 19.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SqlDelight 2.3.x Postgresql pg_search module support
https://github.com/cashapp/sqldelight
**Experimental**
Use with SqlDelight `2.3.x` or higher
---
SqlDelight pg_search Module support
https://github.com/paradedb/paradedb
## Usage
Instead of a new dialect or adding PostgreSql extensions into the core PostgreSql grammar e.g. https://postgis.net/ and https://github.com/pgvector/pgvector
Use a custom SqlDelight module to implement the type resolver for pgSearch operations
```kotlin
sqldelight {
databases {
create("Sample") {
deriveSchemaFromMigrations.set(true)
migrationOutputDirectory = file("$buildDir/generated/migrations")
migrationOutputFileFormat = ".sql"
packageName.set("griffio.queries")
dialect(libs.sqldelight.postgresql.dialect)
module(project(":pgsearch")) // module can be local project
// or external dependency module("io.github.griffio:sqldelight-pgSearch-module:0.0.1")
}
}
}
```
`pgsearch-module` published in Maven Central https://central.sonatype.com/artifact/io.github.griffio/sqldelight-pgsearch/versions
`io.github.griffio:sqldelight-pgsearch:0.0.1`
```sql
CREATE EXTENSION IF NOT EXISTS pg_search;
```
Search operators:
```sql
selectMixedNumericString:
SELECT numeric_field1, numeric_field2, string_field1, string_field2
FROM mixed_numeric_string_test
WHERE content @@@ 'red';
selectMatchDisjunction:
SELECT description, rating, category
FROM items
WHERE description ||| 'running shoes';
selectMatchConjunction:
SELECT description, rating, category
FROM items
WHERE description &&& 'running shoes';
selectMatchConjunctionArray:
SELECT description, rating, category
FROM items
WHERE description &&& ARRAY['running', 'shoes'];
selectPhrase:
SELECT description, rating, category
FROM items
WHERE description ### 'running shoes';
selectTerm:
SELECT description, rating, category
FROM items
WHERE description === 'running';
```
Tokenizers https://docs.paradedb.com/documentation/tokenizers/overview
```sql
selectSimpleTokenizer:
SELECT 'Tokenize me!'::pdb.SIMPLE('stemmer=english')::TEXT[];
selectNgramTokenizer:
SELECT 'Tokenize me!'::pdb.NGRAM(3,3,'prefix_only=true')::TEXT[];
selectSourceCodeTokenizer:
SELECT 'let my_variable = 2'::pdb.SOURCE_CODE::TEXT[];
selectIcuTokenizer:
SELECT 'Hello world! 你好!'::pdb.ICU::TEXT[];
selectChineseCompatibleTokenizer:
SELECT 'Hello world! 你好!'::pdb.CHINESE_COMPATIBLE::TEXT[];
selectRegexPatternTokenizer:
SELECT 'Hello world!'::pdb.REGEX_PATTERN('(?i)\bh\w*')::TEXT[];
selectWhitespaceTokenizer:
SELECT 'Tokenize me!'::pdb.WHITESPACE::TEXT[];
selectLiteralTokenizer:
SELECT 'Tokenize me!'::pdb.LITERAL::TEXT[];
selectUnicodeWordsTokenizer:
SELECT 'Tokenize me! 😊'::pdb.UNICODE_WORDS('remove_emojis=true')::TEXT[];
```
---
```shell
docker run \
--name paradedb \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_DB=mydatabase \
-v paradedb_data:/var/lib/postgresql/ \
-p 5432:5432 \
-d \
paradedb/paradedb:latest
```
```shell
./gradlew build &&
./gradlew flywayMigrate
```