Dominik Schmidt ec58861e4e feat(search): per-field case-insensitive search via _lowercase siblings
Keyword and path fields always index their case-preserved base and, when CaseInsensitive is set, an additional <field>_lowercase sibling used only for matching. The KQL lowering marks a restriction case-insensitive; each backend searches the sibling and lowercases the query value the same way the sibling is precomputed at index time (Go strings.ToLower on both sides, so non-ASCII stays consistent).

Search always returns the case-preserved base, so the sibling never has to be read back. In bleve it is indexed but not stored, kept out of _all, and without doc values. In OpenSearch it deliberately stays in _source: excluding it would make every update-by-query script rebuild all siblings from the document via painless toLowerCase, which lowercases differently than Go and would drift from the query side. Keeping it in _source avoids that, and a lowercased copy of a name or path is negligible disk in a cluster.

The OpenSearch move script keeps the base and its sibling in sync by swapping the moved prefix in Path_lowercase and setting Name_lowercase from Go-lowercased params, so case-insensitive search still finds a file after it moves (previously the sibling went stale). bleve re-indexes the whole document on move/delete/restore, so its siblings stay fresh for free.

This also repairs OpenSearch path search (the query value was no longer folded to lowercase, so path:<Foo> returned nothing) and makes bleve path queries match a folder and its descendants like OpenSearch's path_hierarchy. The Path base stays case-preserved so the move/delete descendant update (an exact TermQuery on Path) matches mixed-case folders.
2026-08-31 13:40:42 +02:00
2026-07-31 23:16:44 +00:00
2026-07-14 09:32:35 +02:00
2025-01-28 18:03:12 +01:00
2025-12-06 17:13:07 +01:00
2025-08-15 12:41:36 +02:00
2025-03-13 14:04:14 +01:00
2026-08-25 09:55:39 +02:00
2026-08-25 11:17:17 +02:00
2026-08-25 15:53:40 +02:00
2026-06-17 15:42:47 +02:00
2025-02-04 11:29:46 +01:00
2026-08-14 09:32:43 +02:00
2025-01-17 17:21:23 +01:00
2026-07-14 09:32:35 +02:00

OpenCloud logo

status-badge Matrix License

Server Backend

Tip

For general information about OpenCloud and how to install please visit OpenCloud on Github and OpenCloud GmbH.

This is the main repository of the OpenCloud server. It contains the golang codebase for the backend services.

Getting Involved

The OpenCloud server is released under Apache 2.0. The project is thrilled to receive contributions in all forms. Start hacking now, there are many ways to get involved such as:

Every contribution is meaningful and appreciated! Please refer to our Contribution Guidelines if you want to get started.

Build OpenCloud

To build the backend, follow these instructions:

Generate the assets needed by e.g., the web UI and the builtin IDP

make generate

Then compile the opencloud binary

make -C opencloud build

That will produce the binary opencloud/bin/opencloud. It can be started as a local test instance right away with a two step command:

opencloud/bin/opencloud init && opencloud/bin/opencloud server

This creates a server configuration (by default in $HOME/.opencloud) and starts the server.

For more setup- and installation options consult the Development Documentation.

Technology

Important information for contributors about the technology in use.

Authentication

The OpenCloud backend authenticates users via OpenID Connect using either an external IdP like Keycloak or the embedded LibreGraph Connect identity provider.

Database

The OpenCloud backend does not use a database. It stores all data in the filesystem. By default, the root directory of the backend is $HOME/.opencloud/.

Security

If you find a security-related issue, please contact security@opencloud.eu immediately.

S
Description
No description provided
Readme Apache-2.0
390 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 50.5%
Gherkin 34.9%
PHP 11.8%
JavaScript 1.2%
Shell 0.6%
Other 0.8%