Skip to main content

Full text search - PostgreSQL Platform - Releases

← App details

Nextcloud 35

Full text search - PostgreSQL Platform 0.1.3
Release Details
UpdatedSept. 21, 2026, 7:17 a.m.
Changelog

Added

  • Nextcloud 35 is supported. The app was tested against 35.0.0, with fulltextsearch and files_fulltextsearch 35.0.0, on a fresh install and on a server upgraded from 34: the index survives the upgrade untouched, so no re-indexing is needed.
  • If you upgraded to Nextcloud 35 while running 0.1.2, the server disabled the app as incompatible and search fell back to the built-in one. Update the app to 0.1.3 and enable it again: the index is still there, and nothing has to be re-indexed.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureTSGQYgTv/iYbgG2/HgoYk6OoJj9Ar3yncm9Qn4Ru+rB7rAZyHR+pk/uKGwN/eZ6Ko2QvyR8gMgX0YieUKUht9Ypz1c4ztw+t6vkH3DYte5peASKWqL6b0gww0DhCqVod+O/+MImR6aCV8GtGiwU6lVjG3mqZAwuEeN8vODa3zpMuLBf0H7panM6REjm2WOKEikVkBn3OMJQIql8du2YkmR1JZlRWul/aTCRlUrh2lSmZolX7xK+kZ6/STl6O6FDowLSQSdjCCRFqVL21GAxmaZAIKokzqGw7ONst7W1MGdLEBsfIX0lghAESh8of9jZIkwfKlhDcFNmApByE0ZM0aEGIQSoV/BUOBrKjC+6HcuEzvmq47242rEgXM9V/XTK94z6fQKBF1eM45sNxAmZQx4SNHGhace11QFVGG264dgN8Ly6S+7Y5Ic9LB3B+Ekkotu3YeVfoB3AOkwS1NLbEpxsnbaRDFeVHQH6mBO///wZxkdnYS6Juz0zHybAHCWcMLBaRCoAD+NXymfbszi10E3kUKZIRPONN6x4FKF2aOKr8P1U6tIS1NeHFxKU/jNmVrW7vqcq7GnB4qoPlrwM97f1dwJkhFtMfHQDv36ggi/t7makII+aDIxwTZcEyL8YEuLKUooiSrg8BLVaKmiJqrtBsSkzS0x80IvQw7s1TlBw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32

Nextcloud 34

Full text search - PostgreSQL Platform 0.1.3
Release Details
UpdatedSept. 21, 2026, 7:17 a.m.
Changelog

Added

  • Nextcloud 35 is supported. The app was tested against 35.0.0, with fulltextsearch and files_fulltextsearch 35.0.0, on a fresh install and on a server upgraded from 34: the index survives the upgrade untouched, so no re-indexing is needed.
  • If you upgraded to Nextcloud 35 while running 0.1.2, the server disabled the app as incompatible and search fell back to the built-in one. Update the app to 0.1.3 and enable it again: the index is still there, and nothing has to be re-indexed.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureTSGQYgTv/iYbgG2/HgoYk6OoJj9Ar3yncm9Qn4Ru+rB7rAZyHR+pk/uKGwN/eZ6Ko2QvyR8gMgX0YieUKUht9Ypz1c4ztw+t6vkH3DYte5peASKWqL6b0gww0DhCqVod+O/+MImR6aCV8GtGiwU6lVjG3mqZAwuEeN8vODa3zpMuLBf0H7panM6REjm2WOKEikVkBn3OMJQIql8du2YkmR1JZlRWul/aTCRlUrh2lSmZolX7xK+kZ6/STl6O6FDowLSQSdjCCRFqVL21GAxmaZAIKokzqGw7ONst7W1MGdLEBsfIX0lghAESh8of9jZIkwfKlhDcFNmApByE0ZM0aEGIQSoV/BUOBrKjC+6HcuEzvmq47242rEgXM9V/XTK94z6fQKBF1eM45sNxAmZQx4SNHGhace11QFVGG264dgN8Ly6S+7Y5Ic9LB3B+Ekkotu3YeVfoB3AOkwS1NLbEpxsnbaRDFeVHQH6mBO///wZxkdnYS6Juz0zHybAHCWcMLBaRCoAD+NXymfbszi10E3kUKZIRPONN6x4FKF2aOKr8P1U6tIS1NeHFxKU/jNmVrW7vqcq7GnB4qoPlrwM97f1dwJkhFtMfHQDv36ggi/t7makII+aDIxwTZcEyL8YEuLKUooiSrg8BLVaKmiJqrtBsSkzS0x80IvQw7s1TlBw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.2
Release Details
UpdatedSept. 11, 2026, 6:39 p.m.
Changelog

Fixed

  • The index table no longer sits inside the Nextcloud table prefix. Nextcloud hands every prefixed table to Doctrine before each schema migration, and Doctrine has no mapping for text[]: occ upgrade stopped on Unknown database type _text at the first core migration, leaving the server in maintenance mode. That blocked every Nextcloud update, security ones included, for as long as this app was installed. Updating the app renames the table in place, keeping the rows, the indexes and the generated column, so no re-indexing is needed.
  • Index names are derived from the table name, the two trigram ones included, so they no longer collide when several installations share a schema. The rename carries them over, rather than leaving a second set to be created beside the first.
  • A large PDF no longer takes the whole indexing run down with it. The bundled parser works in-process and can exhaust PHP's memory, which is a fatal error: nothing catches it, and indexing stops where it stands. Documents it cannot be trusted with are now indexed on their title alone, and the reason is logged. Installing pdftotext (package poppler-utils) lifts the limit entirely — it runs as a separate process.
  • Truncating a document at the 4 MiB cap is now logged. It was silent, and the document still came up in results, searchable on its beginning and mute on the rest.

If you are stuck

Before attempting a Nextcloud upgrade, update this app: occ app:update fulltextsearch_postgresql, then upgrade as usual.

If the upgrade has already failed, installing this version does not help on its own: Nextcloud runs core schema migrations before any app repair step, so the step never gets its turn, and occ app:update reports the app as up to date without doing anything. Removing the app does not help either — it leaves the table behind, and the table is what breaks the migration. Rename it by hand:

sh psql -d <your_nextcloud_database> \ -c 'ALTER TABLE oc_fulltextsearch_pg RENAME TO fts_pg_oc' occ upgrade && occ maintenance:mode --off

The next update of this app carries the index names over. fts_pg_oc assumes the default oc_ table prefix; the name is fts_pg_ followed by yours, stripped of anything that is not a letter or a digit. Dropping the table works too — it is a cache — at the price of one re-index.

Before removing the app

occ app:remove leaves the index table, the nc_fts_* text search configurations and a few rows in oc_appconfig behind — occ fulltextsearch:reset empties the table but does not drop it. Nothing breaks if they stay, the table being outside the prefix now; drop it and the configurations by hand if you want the database clean.

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
Signatureze2c+khyjmZMGVJcuBo8SQ+UVbJ7feAnmd9ww77V1Bkaeor0pXbFYGL4nQkbjdzvzFrVYf/FRRz8yenEC1VO5jBLmQATNYENZ8ADL1kRAUubM/+XjxkfV8gs3ZS+RzWziEBxiCp2dBHT4yOED19NkEKNkU2r0QhKkDOmnu1wOxl+ExVNovlz8DPF3RFPe6EQK7RhUwns4jKr7aGIETqP0WWNsjn3h7qrfn6zlyuVbhMWwxntYpRNc0/y/heRKlpA2i/Mrkurgq1VLmZ90CMM8wRvHOddXr40QaRAbVaSO8IvuJWo+5cXqO6Zlje7l0aADDLDGGuE4mCunciuU5orU6Kr7HnSyDbOWkab5OMFvkagLsYzbxFVT3AmNFWe4y9y8+ZyI7BDvZaB9bl+wcrZwDOwDF6Y8mGsUGks9UAG5FmTtSyciykcPVjWkz4/HfF4cW9l+8fe9niBkzeyRMeA6Wp0mouoGjx62tmkal9ApJ997rNA20zzJzdLo5lhRH1wxons0TOiUQCYwlYWFMHIMj0cNGibBo9CMoLZCVHLntdZjfuysS270QJ4Mox3PkLSp4Ml3zVIYYvmewjqr8UDMeksElI1k/fwvPJeWwtA3LoPux6KFjdh43GwgdgmWpYXX+xKAh2WekxGLkBjRtsVG6Xsl2LploQOU1KcBiOzyvI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.1
Release Details
UpdatedSept. 10, 2026, 1:58 p.m.
Changelog

Fixed

  • Installing unaccent after the first indexing run now rebuilds the index table, so searching without accents starts working. It used to stay broken for good: the generated tsvector column is fixed when the table is created, and neither fulltextsearch:reset nor a full re-index redefined it.
  • occ fulltextsearch:check no longer reports a healthy index when the table was built for a different configuration. It names the mismatch and the two commands that settle it.

Changed

  • The warning about a missing extension now suggests granting CREATE on the database to the role Nextcloud connects with, which lets the app create both extensions on its next indexing run, instead of asking a superuser to create each one.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureEoMfwGUgSSgnSxp7TBcra3bSnl3X1LakOizPabWQwSSQuhUS6KuBRpRz89jYdDXkjKKXGmTllbkblpHEqKxiqFclqggMiLWYz9CMJBcoOKrxqfwNWI5rXynheT6niF8/s8QMAEA7Yw6LCczKNcPSJOcgjfKyf73cZQhtZWoeoAAsXNv6YAjFb04Y52YpKlTYZ8HhHiAyH++OJvMPc6umXs24GcZiFZZ2QMEg2uPhnQYX0exVARwVxFSMnRPJiWW4Y7YClpHF+78UZ+wZYrBrAatRTzGKDghGkvDarw3HOq3W4VROk8CoQI3WFIgjf/+fUjWBrhHbYtksMzDIwdoiSa16S9NIHAF8pknA1ZawqKEKuKANKlFpKtjll9Z3DwO+x8xT4HE9TJ1IZmLh5bnRulEpndc0W2qf9OlaiUJlqv52kPYFNFXGNyR4wF3g9SBn44HsKRxLXDFcY6Kk+w64K0lz9Tqcy2ssnypln9peK/cIMEs4+B2a4ct6gxsuRfguicLhiW16mxovgSGgenDtgiOtQYkU/YcoT0AzrlzZDtZ6UppvUbNI5tdNHvr8q1luzI5QBxKGWc9ipjk1xWOA1j7UpGxmX0lHGYokNA04QXFcdh3YbWIAwRNBE9mDxvPpIVsF8Cypg66YE4uHaT8j9ZPpLY1xxc/Mv3/Jl7IBm2Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.0
Release Details
UpdatedSept. 10, 2026, 11:44 a.m.
Changelog

First release. Tested on Nextcloud 32, 33 and 34, against PostgreSQL 15 and 18.

Added

  • Full-text search for Nextcloud backed by PostgreSQL, with no service to run alongside it.
  • Language-aware indexing: content is indexed with a PostgreSQL text search configuration and with an accent-folding variant derived from it, so a search without accents still matches accented content. The language follows the Nextcloud instance by default, and several can be combined for a mixed corpus.
  • PDF and office content extracted by the app itself — docx, xlsx, pptx, odt, ods, odp and PDF, with no external extraction service to install.
  • Permissions indexed with the content, so a search only ever matches what the person running it can access.
  • Search filters as the Files content provider issues them: by source, by extension, within a folder, and partial matching on file and share names.
  • Query syntax: OR between words with documents carrying every term ranked first, binding quotes for exact phrases, -word to exclude, +word to require, and prefix matching from four characters.
  • An administration panel offering the text search configurations installed on the server.
  • English and French interface translations.

Known limitations

  • Writing systems without spaces are not segmented, so Chinese or Japanese content stays unfindable. No setting changes this.
  • Scanned PDFs are not read, though scanned images are: the upstream OCR app hands over text for jpg and png, but its PDF path is broken and it declares support only up to Nextcloud 32.
  • The indexed content is held twice, once as text so excerpts can be built and once in the generated tsvector, and once more per extra language.
  • In a multilingual corpus, excerpts are cut using the dictionary of the first configured language: the text stays correct, only the choice of fragment may be less apt.
  • Advanced search filters (comparison queries, additional fields) are not implemented, as the Files content provider does not issue them.
  • No facets and no configurable sorting: the framework API does not expose them.
  • Tested up to 50,000 documents; beyond that, uncharted.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureNLqETmFVzg0tINV9YyAHXRm/+I7rI2nI1dOxhtiNsojW57QIIjRo7JDW4W9ooNq5+5Oyeb/L5nZCA8YP95xfmu5b4jsTqbYfwS+fnV/437G77VTa5Lrveua33X2cqUMFEngLaKmZCaNGbNRDNEgIW02P5Zb/GXp1aZCR8BN3NVWtisWmcRJjzHtsmPUTX95mNcEs5n91/24Ofq6tSwLtY15c1plG5m2mqXnH2jguCF2a87m4P7p+IpnW1lgolTWsyOTBsd9fs6++a3Mz4tkJdnWmIwXvmaUNFDaX6VfGxMc2pJoAi/RrKER0pLNoJ+NIlIYwuCibW8WZZ/j/nFQhEjKl9l7izJMvVA3ZyuklvOpLBLbFE5alcTynazCIIGxS1nBoRe3jgW+AbSbv1nOQvYgIlVyHTY3WFeFa7cLWLRusW8GXQ9ppw566KnOdb6tuTUHwLA/cJl+X30dcEGJX+nstsX/dFr3MaghR0BW+ceDR54u9Q/vm5cyFh4eqVBUzMXoCVrWGhuayaL5Z/6VKFxfI0JfbjmyNYUiDzJ2qtaE0Lp2/4zVdcJZOSth4CzagHI6KlwiumFYnma2oeJB+/rNS6j7BHOvKgqMPXFKpLSWUG1KP+hiscLvGACq9OnBz9X1Gq3IFZbQSJRWzzE/GkKEz5mHieufy6VyajpXXbeg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32

Nextcloud 33

Full text search - PostgreSQL Platform 0.1.3
Release Details
UpdatedSept. 21, 2026, 7:17 a.m.
Changelog

Added

  • Nextcloud 35 is supported. The app was tested against 35.0.0, with fulltextsearch and files_fulltextsearch 35.0.0, on a fresh install and on a server upgraded from 34: the index survives the upgrade untouched, so no re-indexing is needed.
  • If you upgraded to Nextcloud 35 while running 0.1.2, the server disabled the app as incompatible and search fell back to the built-in one. Update the app to 0.1.3 and enable it again: the index is still there, and nothing has to be re-indexed.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureTSGQYgTv/iYbgG2/HgoYk6OoJj9Ar3yncm9Qn4Ru+rB7rAZyHR+pk/uKGwN/eZ6Ko2QvyR8gMgX0YieUKUht9Ypz1c4ztw+t6vkH3DYte5peASKWqL6b0gww0DhCqVod+O/+MImR6aCV8GtGiwU6lVjG3mqZAwuEeN8vODa3zpMuLBf0H7panM6REjm2WOKEikVkBn3OMJQIql8du2YkmR1JZlRWul/aTCRlUrh2lSmZolX7xK+kZ6/STl6O6FDowLSQSdjCCRFqVL21GAxmaZAIKokzqGw7ONst7W1MGdLEBsfIX0lghAESh8of9jZIkwfKlhDcFNmApByE0ZM0aEGIQSoV/BUOBrKjC+6HcuEzvmq47242rEgXM9V/XTK94z6fQKBF1eM45sNxAmZQx4SNHGhace11QFVGG264dgN8Ly6S+7Y5Ic9LB3B+Ekkotu3YeVfoB3AOkwS1NLbEpxsnbaRDFeVHQH6mBO///wZxkdnYS6Juz0zHybAHCWcMLBaRCoAD+NXymfbszi10E3kUKZIRPONN6x4FKF2aOKr8P1U6tIS1NeHFxKU/jNmVrW7vqcq7GnB4qoPlrwM97f1dwJkhFtMfHQDv36ggi/t7makII+aDIxwTZcEyL8YEuLKUooiSrg8BLVaKmiJqrtBsSkzS0x80IvQw7s1TlBw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.2
Release Details
UpdatedSept. 11, 2026, 6:39 p.m.
Changelog

Fixed

  • The index table no longer sits inside the Nextcloud table prefix. Nextcloud hands every prefixed table to Doctrine before each schema migration, and Doctrine has no mapping for text[]: occ upgrade stopped on Unknown database type _text at the first core migration, leaving the server in maintenance mode. That blocked every Nextcloud update, security ones included, for as long as this app was installed. Updating the app renames the table in place, keeping the rows, the indexes and the generated column, so no re-indexing is needed.
  • Index names are derived from the table name, the two trigram ones included, so they no longer collide when several installations share a schema. The rename carries them over, rather than leaving a second set to be created beside the first.
  • A large PDF no longer takes the whole indexing run down with it. The bundled parser works in-process and can exhaust PHP's memory, which is a fatal error: nothing catches it, and indexing stops where it stands. Documents it cannot be trusted with are now indexed on their title alone, and the reason is logged. Installing pdftotext (package poppler-utils) lifts the limit entirely — it runs as a separate process.
  • Truncating a document at the 4 MiB cap is now logged. It was silent, and the document still came up in results, searchable on its beginning and mute on the rest.

If you are stuck

Before attempting a Nextcloud upgrade, update this app: occ app:update fulltextsearch_postgresql, then upgrade as usual.

If the upgrade has already failed, installing this version does not help on its own: Nextcloud runs core schema migrations before any app repair step, so the step never gets its turn, and occ app:update reports the app as up to date without doing anything. Removing the app does not help either — it leaves the table behind, and the table is what breaks the migration. Rename it by hand:

sh psql -d <your_nextcloud_database> \ -c 'ALTER TABLE oc_fulltextsearch_pg RENAME TO fts_pg_oc' occ upgrade && occ maintenance:mode --off

The next update of this app carries the index names over. fts_pg_oc assumes the default oc_ table prefix; the name is fts_pg_ followed by yours, stripped of anything that is not a letter or a digit. Dropping the table works too — it is a cache — at the price of one re-index.

Before removing the app

occ app:remove leaves the index table, the nc_fts_* text search configurations and a few rows in oc_appconfig behind — occ fulltextsearch:reset empties the table but does not drop it. Nothing breaks if they stay, the table being outside the prefix now; drop it and the configurations by hand if you want the database clean.

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
Signatureze2c+khyjmZMGVJcuBo8SQ+UVbJ7feAnmd9ww77V1Bkaeor0pXbFYGL4nQkbjdzvzFrVYf/FRRz8yenEC1VO5jBLmQATNYENZ8ADL1kRAUubM/+XjxkfV8gs3ZS+RzWziEBxiCp2dBHT4yOED19NkEKNkU2r0QhKkDOmnu1wOxl+ExVNovlz8DPF3RFPe6EQK7RhUwns4jKr7aGIETqP0WWNsjn3h7qrfn6zlyuVbhMWwxntYpRNc0/y/heRKlpA2i/Mrkurgq1VLmZ90CMM8wRvHOddXr40QaRAbVaSO8IvuJWo+5cXqO6Zlje7l0aADDLDGGuE4mCunciuU5orU6Kr7HnSyDbOWkab5OMFvkagLsYzbxFVT3AmNFWe4y9y8+ZyI7BDvZaB9bl+wcrZwDOwDF6Y8mGsUGks9UAG5FmTtSyciykcPVjWkz4/HfF4cW9l+8fe9niBkzeyRMeA6Wp0mouoGjx62tmkal9ApJ997rNA20zzJzdLo5lhRH1wxons0TOiUQCYwlYWFMHIMj0cNGibBo9CMoLZCVHLntdZjfuysS270QJ4Mox3PkLSp4Ml3zVIYYvmewjqr8UDMeksElI1k/fwvPJeWwtA3LoPux6KFjdh43GwgdgmWpYXX+xKAh2WekxGLkBjRtsVG6Xsl2LploQOU1KcBiOzyvI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.1
Release Details
UpdatedSept. 10, 2026, 1:58 p.m.
Changelog

Fixed

  • Installing unaccent after the first indexing run now rebuilds the index table, so searching without accents starts working. It used to stay broken for good: the generated tsvector column is fixed when the table is created, and neither fulltextsearch:reset nor a full re-index redefined it.
  • occ fulltextsearch:check no longer reports a healthy index when the table was built for a different configuration. It names the mismatch and the two commands that settle it.

Changed

  • The warning about a missing extension now suggests granting CREATE on the database to the role Nextcloud connects with, which lets the app create both extensions on its next indexing run, instead of asking a superuser to create each one.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureEoMfwGUgSSgnSxp7TBcra3bSnl3X1LakOizPabWQwSSQuhUS6KuBRpRz89jYdDXkjKKXGmTllbkblpHEqKxiqFclqggMiLWYz9CMJBcoOKrxqfwNWI5rXynheT6niF8/s8QMAEA7Yw6LCczKNcPSJOcgjfKyf73cZQhtZWoeoAAsXNv6YAjFb04Y52YpKlTYZ8HhHiAyH++OJvMPc6umXs24GcZiFZZ2QMEg2uPhnQYX0exVARwVxFSMnRPJiWW4Y7YClpHF+78UZ+wZYrBrAatRTzGKDghGkvDarw3HOq3W4VROk8CoQI3WFIgjf/+fUjWBrhHbYtksMzDIwdoiSa16S9NIHAF8pknA1ZawqKEKuKANKlFpKtjll9Z3DwO+x8xT4HE9TJ1IZmLh5bnRulEpndc0W2qf9OlaiUJlqv52kPYFNFXGNyR4wF3g9SBn44HsKRxLXDFcY6Kk+w64K0lz9Tqcy2ssnypln9peK/cIMEs4+B2a4ct6gxsuRfguicLhiW16mxovgSGgenDtgiOtQYkU/YcoT0AzrlzZDtZ6UppvUbNI5tdNHvr8q1luzI5QBxKGWc9ipjk1xWOA1j7UpGxmX0lHGYokNA04QXFcdh3YbWIAwRNBE9mDxvPpIVsF8Cypg66YE4uHaT8j9ZPpLY1xxc/Mv3/Jl7IBm2Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.0
Release Details
UpdatedSept. 10, 2026, 11:44 a.m.
Changelog

First release. Tested on Nextcloud 32, 33 and 34, against PostgreSQL 15 and 18.

Added

  • Full-text search for Nextcloud backed by PostgreSQL, with no service to run alongside it.
  • Language-aware indexing: content is indexed with a PostgreSQL text search configuration and with an accent-folding variant derived from it, so a search without accents still matches accented content. The language follows the Nextcloud instance by default, and several can be combined for a mixed corpus.
  • PDF and office content extracted by the app itself — docx, xlsx, pptx, odt, ods, odp and PDF, with no external extraction service to install.
  • Permissions indexed with the content, so a search only ever matches what the person running it can access.
  • Search filters as the Files content provider issues them: by source, by extension, within a folder, and partial matching on file and share names.
  • Query syntax: OR between words with documents carrying every term ranked first, binding quotes for exact phrases, -word to exclude, +word to require, and prefix matching from four characters.
  • An administration panel offering the text search configurations installed on the server.
  • English and French interface translations.

Known limitations

  • Writing systems without spaces are not segmented, so Chinese or Japanese content stays unfindable. No setting changes this.
  • Scanned PDFs are not read, though scanned images are: the upstream OCR app hands over text for jpg and png, but its PDF path is broken and it declares support only up to Nextcloud 32.
  • The indexed content is held twice, once as text so excerpts can be built and once in the generated tsvector, and once more per extra language.
  • In a multilingual corpus, excerpts are cut using the dictionary of the first configured language: the text stays correct, only the choice of fragment may be less apt.
  • Advanced search filters (comparison queries, additional fields) are not implemented, as the Files content provider does not issue them.
  • No facets and no configurable sorting: the framework API does not expose them.
  • Tested up to 50,000 documents; beyond that, uncharted.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureNLqETmFVzg0tINV9YyAHXRm/+I7rI2nI1dOxhtiNsojW57QIIjRo7JDW4W9ooNq5+5Oyeb/L5nZCA8YP95xfmu5b4jsTqbYfwS+fnV/437G77VTa5Lrveua33X2cqUMFEngLaKmZCaNGbNRDNEgIW02P5Zb/GXp1aZCR8BN3NVWtisWmcRJjzHtsmPUTX95mNcEs5n91/24Ofq6tSwLtY15c1plG5m2mqXnH2jguCF2a87m4P7p+IpnW1lgolTWsyOTBsd9fs6++a3Mz4tkJdnWmIwXvmaUNFDaX6VfGxMc2pJoAi/RrKER0pLNoJ+NIlIYwuCibW8WZZ/j/nFQhEjKl9l7izJMvVA3ZyuklvOpLBLbFE5alcTynazCIIGxS1nBoRe3jgW+AbSbv1nOQvYgIlVyHTY3WFeFa7cLWLRusW8GXQ9ppw566KnOdb6tuTUHwLA/cJl+X30dcEGJX+nstsX/dFr3MaghR0BW+ceDR54u9Q/vm5cyFh4eqVBUzMXoCVrWGhuayaL5Z/6VKFxfI0JfbjmyNYUiDzJ2qtaE0Lp2/4zVdcJZOSth4CzagHI6KlwiumFYnma2oeJB+/rNS6j7BHOvKgqMPXFKpLSWUG1KP+hiscLvGACq9OnBz9X1Gq3IFZbQSJRWzzE/GkKEz5mHieufy6VyajpXXbeg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32

Nextcloud 32

Full text search - PostgreSQL Platform 0.1.3
Release Details
UpdatedSept. 21, 2026, 7:17 a.m.
Changelog

Added

  • Nextcloud 35 is supported. The app was tested against 35.0.0, with fulltextsearch and files_fulltextsearch 35.0.0, on a fresh install and on a server upgraded from 34: the index survives the upgrade untouched, so no re-indexing is needed.
  • If you upgraded to Nextcloud 35 while running 0.1.2, the server disabled the app as incompatible and search fell back to the built-in one. Update the app to 0.1.3 and enable it again: the index is still there, and nothing has to be re-indexed.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureTSGQYgTv/iYbgG2/HgoYk6OoJj9Ar3yncm9Qn4Ru+rB7rAZyHR+pk/uKGwN/eZ6Ko2QvyR8gMgX0YieUKUht9Ypz1c4ztw+t6vkH3DYte5peASKWqL6b0gww0DhCqVod+O/+MImR6aCV8GtGiwU6lVjG3mqZAwuEeN8vODa3zpMuLBf0H7panM6REjm2WOKEikVkBn3OMJQIql8du2YkmR1JZlRWul/aTCRlUrh2lSmZolX7xK+kZ6/STl6O6FDowLSQSdjCCRFqVL21GAxmaZAIKokzqGw7ONst7W1MGdLEBsfIX0lghAESh8of9jZIkwfKlhDcFNmApByE0ZM0aEGIQSoV/BUOBrKjC+6HcuEzvmq47242rEgXM9V/XTK94z6fQKBF1eM45sNxAmZQx4SNHGhace11QFVGG264dgN8Ly6S+7Y5Ic9LB3B+Ekkotu3YeVfoB3AOkwS1NLbEpxsnbaRDFeVHQH6mBO///wZxkdnYS6Juz0zHybAHCWcMLBaRCoAD+NXymfbszi10E3kUKZIRPONN6x4FKF2aOKr8P1U6tIS1NeHFxKU/jNmVrW7vqcq7GnB4qoPlrwM97f1dwJkhFtMfHQDv36ggi/t7makII+aDIxwTZcEyL8YEuLKUooiSrg8BLVaKmiJqrtBsSkzS0x80IvQw7s1TlBw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.2
Release Details
UpdatedSept. 11, 2026, 6:39 p.m.
Changelog

Fixed

  • The index table no longer sits inside the Nextcloud table prefix. Nextcloud hands every prefixed table to Doctrine before each schema migration, and Doctrine has no mapping for text[]: occ upgrade stopped on Unknown database type _text at the first core migration, leaving the server in maintenance mode. That blocked every Nextcloud update, security ones included, for as long as this app was installed. Updating the app renames the table in place, keeping the rows, the indexes and the generated column, so no re-indexing is needed.
  • Index names are derived from the table name, the two trigram ones included, so they no longer collide when several installations share a schema. The rename carries them over, rather than leaving a second set to be created beside the first.
  • A large PDF no longer takes the whole indexing run down with it. The bundled parser works in-process and can exhaust PHP's memory, which is a fatal error: nothing catches it, and indexing stops where it stands. Documents it cannot be trusted with are now indexed on their title alone, and the reason is logged. Installing pdftotext (package poppler-utils) lifts the limit entirely — it runs as a separate process.
  • Truncating a document at the 4 MiB cap is now logged. It was silent, and the document still came up in results, searchable on its beginning and mute on the rest.

If you are stuck

Before attempting a Nextcloud upgrade, update this app: occ app:update fulltextsearch_postgresql, then upgrade as usual.

If the upgrade has already failed, installing this version does not help on its own: Nextcloud runs core schema migrations before any app repair step, so the step never gets its turn, and occ app:update reports the app as up to date without doing anything. Removing the app does not help either — it leaves the table behind, and the table is what breaks the migration. Rename it by hand:

sh psql -d <your_nextcloud_database> \ -c 'ALTER TABLE oc_fulltextsearch_pg RENAME TO fts_pg_oc' occ upgrade && occ maintenance:mode --off

The next update of this app carries the index names over. fts_pg_oc assumes the default oc_ table prefix; the name is fts_pg_ followed by yours, stripped of anything that is not a letter or a digit. Dropping the table works too — it is a cache — at the price of one re-index.

Before removing the app

occ app:remove leaves the index table, the nc_fts_* text search configurations and a few rows in oc_appconfig behind — occ fulltextsearch:reset empties the table but does not drop it. Nothing breaks if they stay, the table being outside the prefix now; drop it and the configurations by hand if you want the database clean.

Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
Signatureze2c+khyjmZMGVJcuBo8SQ+UVbJ7feAnmd9ww77V1Bkaeor0pXbFYGL4nQkbjdzvzFrVYf/FRRz8yenEC1VO5jBLmQATNYENZ8ADL1kRAUubM/+XjxkfV8gs3ZS+RzWziEBxiCp2dBHT4yOED19NkEKNkU2r0QhKkDOmnu1wOxl+ExVNovlz8DPF3RFPe6EQK7RhUwns4jKr7aGIETqP0WWNsjn3h7qrfn6zlyuVbhMWwxntYpRNc0/y/heRKlpA2i/Mrkurgq1VLmZ90CMM8wRvHOddXr40QaRAbVaSO8IvuJWo+5cXqO6Zlje7l0aADDLDGGuE4mCunciuU5orU6Kr7HnSyDbOWkab5OMFvkagLsYzbxFVT3AmNFWe4y9y8+ZyI7BDvZaB9bl+wcrZwDOwDF6Y8mGsUGks9UAG5FmTtSyciykcPVjWkz4/HfF4cW9l+8fe9niBkzeyRMeA6Wp0mouoGjx62tmkal9ApJ997rNA20zzJzdLo5lhRH1wxons0TOiUQCYwlYWFMHIMj0cNGibBo9CMoLZCVHLntdZjfuysS270QJ4Mox3PkLSp4Ml3zVIYYvmewjqr8UDMeksElI1k/fwvPJeWwtA3LoPux6KFjdh43GwgdgmWpYXX+xKAh2WekxGLkBjRtsVG6Xsl2LploQOU1KcBiOzyvI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.1
Release Details
UpdatedSept. 10, 2026, 1:58 p.m.
Changelog

Fixed

  • Installing unaccent after the first indexing run now rebuilds the index table, so searching without accents starts working. It used to stay broken for good: the generated tsvector column is fixed when the table is created, and neither fulltextsearch:reset nor a full re-index redefined it.
  • occ fulltextsearch:check no longer reports a healthy index when the table was built for a different configuration. It names the mismatch and the two commands that settle it.

Changed

  • The warning about a missing extension now suggests granting CREATE on the database to the role Nextcloud connects with, which lets the app create both extensions on its next indexing run, instead of asking a superuser to create each one.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureEoMfwGUgSSgnSxp7TBcra3bSnl3X1LakOizPabWQwSSQuhUS6KuBRpRz89jYdDXkjKKXGmTllbkblpHEqKxiqFclqggMiLWYz9CMJBcoOKrxqfwNWI5rXynheT6niF8/s8QMAEA7Yw6LCczKNcPSJOcgjfKyf73cZQhtZWoeoAAsXNv6YAjFb04Y52YpKlTYZ8HhHiAyH++OJvMPc6umXs24GcZiFZZ2QMEg2uPhnQYX0exVARwVxFSMnRPJiWW4Y7YClpHF+78UZ+wZYrBrAatRTzGKDghGkvDarw3HOq3W4VROk8CoQI3WFIgjf/+fUjWBrhHbYtksMzDIwdoiSa16S9NIHAF8pknA1ZawqKEKuKANKlFpKtjll9Z3DwO+x8xT4HE9TJ1IZmLh5bnRulEpndc0W2qf9OlaiUJlqv52kPYFNFXGNyR4wF3g9SBn44HsKRxLXDFcY6Kk+w64K0lz9Tqcy2ssnypln9peK/cIMEs4+B2a4ct6gxsuRfguicLhiW16mxovgSGgenDtgiOtQYkU/YcoT0AzrlzZDtZ6UppvUbNI5tdNHvr8q1luzI5QBxKGWc9ipjk1xWOA1j7UpGxmX0lHGYokNA04QXFcdh3YbWIAwRNBE9mDxvPpIVsF8Cypg66YE4uHaT8j9ZPpLY1xxc/Mv3/Jl7IBm2Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32
Full text search - PostgreSQL Platform 0.1.0
Release Details
UpdatedSept. 10, 2026, 11:44 a.m.
Changelog

First release. Tested on Nextcloud 32, 33 and 34, against PostgreSQL 15 and 18.

Added

  • Full-text search for Nextcloud backed by PostgreSQL, with no service to run alongside it.
  • Language-aware indexing: content is indexed with a PostgreSQL text search configuration and with an accent-folding variant derived from it, so a search without accents still matches accented content. The language follows the Nextcloud instance by default, and several can be combined for a mixed corpus.
  • PDF and office content extracted by the app itself — docx, xlsx, pptx, odt, ods, odp and PDF, with no external extraction service to install.
  • Permissions indexed with the content, so a search only ever matches what the person running it can access.
  • Search filters as the Files content provider issues them: by source, by extension, within a folder, and partial matching on file and share names.
  • Query syntax: OR between words with documents carrying every term ranked first, binding quotes for exact phrases, -word to exclude, +word to require, and prefix matching from four characters.
  • An administration panel offering the text search configurations installed on the server.
  • English and French interface translations.

Known limitations

  • Writing systems without spaces are not segmented, so Chinese or Japanese content stays unfindable. No setting changes this.
  • Scanned PDFs are not read, though scanned images are: the upstream OCR app hands over text for jpg and png, but its PDF path is broken and it declares support only up to Nextcloud 32.
  • The indexed content is held twice, once as text so excerpts can be built and once in the generated tsvector, and once more per extra language.
  • In a multilingual corpus, excerpts are cut using the dictionary of the first configured language: the text stays correct, only the choice of fragment may be less apt.
  • Advanced search filters (comparison queries, additional fields) are not implemented, as the Files content provider does not issue them.
  • No facets and no configurable sorting: the framework API does not expose them.
  • Tested up to 50,000 documents; beyond that, uncharted.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEFDCCAvwCAhQQMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTEwMDkxNjUyWhcNMzYxMjE2MDkxNjUyWjAkMSIwIAYD
VQQDDBlmdWxsdGV4dHNlYXJjaF9wb3N0Z3Jlc3FsMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2sF3ms/ia9dqm8FCgMFF0ETu8YFPNIrcJzQY0D8vDOty
yuip7tPoPyiusKlhQNJ+dlb6pR38ryS3l5CWtA1NsPLtZoxpeN+9eCQonDGOm/iN
XdcPj9ymNimqi9y/IhYlaoElZ2ITefcnrJsAus3kW7EeDIC3Yvaki4PuFo99ubX2
/EFlNFF8AStn0IhM34IW4NF1xW5Ctg3FGJdoWTr9XFVN3z/diI2czutQxzbPX/Kk
UqCFjeXCaOGMaKjEVRhIhb8EJxIWIFnX6QBS2GaUK8AYdLTPxjGNtDzyU9QFBh69
sqqiygNyxaLY2LN+W/F0n1/dMHkFMD+FTqoQJZuqSi1LCOfIcNevhLwkTboooAbL
x2yIfaAay7zikiv5V7b6n4qKUdRLtqXXtWEBltejUmYBpaE6oN1FsprAMLO1/EmL
q5/VgjJoysG83MHNmjRE9/rqFHpo5PPylJ2MrJKmTZJtoDC5XHOMJpT2n0Vw6cBt
lzZXkWt8jn+nss0HA1SHuTiLOMbhn3KI/GkZyzDNVZm7vaWVbPssJCR3grAxfjpb
10VAqQFqmwEkx1PxmzhNj20eGwnubQHddeMrXm/fXL95CwR9os+g6OURfrkW12nt
1szK9xLEZCBo9CT78LrnHgbF5bvVIWMAnNOR242sOSYWsbux2HbLDgD2qFd/UEkC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhTk9TndxDinGvzUCNVsN/yKFnoTCG97K
IYAqPpxUIhe8Q00PP08TgR8qNzpfiImxJxkhY2sijbUnzuoniWQ+aGZoraqTw2PT
p0s65o7XhJEvCbeh5c4YQ0AznSSkzQl+aSkiepTYKhBX4rLPxfhCV24L5rbsQxzp
W/FLHWr4rXFxktpQV7O82ID7Q9eyf+VGJedr3tumyYJDBGOJ5J8ruMHYQILSvwZx
Bj0gJ1EWx9+gKpbuoa7lJus8vd/8EGVQdCoHnGrU3ElfJw7vHjdP+SvySLY9ktc1
bP81rnQ1j3NiBosUX+ambjkYuSO2ycBjMWVn/3C/TiT7N34EX7PGtg==
-----END CERTIFICATE-----
SignatureNLqETmFVzg0tINV9YyAHXRm/+I7rI2nI1dOxhtiNsojW57QIIjRo7JDW4W9ooNq5+5Oyeb/L5nZCA8YP95xfmu5b4jsTqbYfwS+fnV/437G77VTa5Lrveua33X2cqUMFEngLaKmZCaNGbNRDNEgIW02P5Zb/GXp1aZCR8BN3NVWtisWmcRJjzHtsmPUTX95mNcEs5n91/24Ofq6tSwLtY15c1plG5m2mqXnH2jguCF2a87m4P7p+IpnW1lgolTWsyOTBsd9fs6++a3Mz4tkJdnWmIwXvmaUNFDaX6VfGxMc2pJoAi/RrKER0pLNoJ+NIlIYwuCibW8WZZ/j/nFQhEjKl9l7izJMvVA3ZyuklvOpLBLbFE5alcTynazCIIGxS1nBoRe3jgW+AbSbv1nOQvYgIlVyHTY3WFeFa7cLWLRusW8GXQ9ppw566KnOdb6tuTUHwLA/cJl+X30dcEGJX+nstsX/dFr3MaghR0BW+ceDR54u9Q/vm5cyFh4eqVBUzMXoCVrWGhuayaL5Z/6VKFxfI0JfbjmyNYUiDzJ2qtaE0Lp2/4zVdcJZOSth4CzagHI6KlwiumFYnma2oeJB+/rNS6j7BHOvKgqMPXFKpLSWUG1KP+hiscLvGACq9OnBz9X1Gq3IFZbQSJRWzzE/GkKEz5mHieufy6VyajpXXbeg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases PostgreSQL >=15.0.0
Minimum Integer bits32