|
|
@@ -23,6 +23,9 @@ module.exports = {
|
|
|
async init() {
|
|
|
WIKI.logger.info(`(SEARCH/POSTGRES) Initializing...`)
|
|
|
|
|
|
+ // -> Ensure pg_trgm extension is available (required for similarity search)
|
|
|
+ await WIKI.models.knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm')
|
|
|
+
|
|
|
// -> Create Search Index
|
|
|
const indexExists = await WIKI.models.knex.schema.hasTable('pagesVector')
|
|
|
if (!indexExists) {
|
|
|
@@ -45,7 +48,6 @@ module.exports = {
|
|
|
CREATE TABLE "pagesWords" AS SELECT word FROM ts_stat(
|
|
|
'SELECT to_tsvector(''simple'', "title") || to_tsvector(''simple'', "description") || to_tsvector(''simple'', "content") FROM "pagesVector"'
|
|
|
)`)
|
|
|
- await WIKI.models.knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm')
|
|
|
await WIKI.models.knex.raw(`CREATE INDEX "pageWords_idx" ON "pagesWords" USING GIN (word gin_trgm_ops)`)
|
|
|
}
|
|
|
|
|
|
@@ -81,8 +83,12 @@ module.exports = {
|
|
|
${qryEnd}
|
|
|
`, qryParams)
|
|
|
if (results.rows.length < 5) {
|
|
|
- const suggestResults = await WIKI.models.knex.raw(`SELECT word, word <-> ? AS rank FROM "pagesWords" WHERE similarity(word, ?) > 0.2 ORDER BY rank LIMIT 5;`, [q, q])
|
|
|
- suggestions = suggestResults.rows.map(r => r.word)
|
|
|
+ try {
|
|
|
+ const suggestResults = await WIKI.models.knex.raw(`SELECT word, word <-> ? AS rank FROM "pagesWords" WHERE similarity(word, ?) > 0.2 ORDER BY rank LIMIT 5;`, [q, q])
|
|
|
+ suggestions = suggestResults.rows.map(r => r.word)
|
|
|
+ } catch (err) {
|
|
|
+ WIKI.logger.warn(`Search Engine Suggestion Error (pg_trgm extension may be missing): ${err.message}`)
|
|
|
+ }
|
|
|
}
|
|
|
return {
|
|
|
results: results.rows,
|