From 8d66ed4cbe0778227c77bf539e39301d2bd71c30 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 27 Jan 2026 22:05:56 +0100 Subject: [PATCH] implemented full-text search for wiki Signed-off-by: Stephan Richter --- .../de/srsoftware/umbrella/wiki/SqliteDb.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java index 3603899b..7243134f 100644 --- a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java @@ -152,15 +152,27 @@ public class SqliteDb extends BaseDb implements WikiDb { @Override public Map find(long userId, List keys, boolean fulltext) { try { - var query = select(ALL).from(TABLE_PAGES).leftJoin(ID,TABLE_PAGES_USERS,PAGE_ID).where(USER_ID,equal(userId)); - for (var key : keys) query.where(TITLE,like("%"+key+"%")); - var rs = query.exec(db); var map = new HashMap(); - while (rs.next()) { - var page = WikiPage.of(rs); - map.put(page.id(),page); + { + var query = select(ALL).from(TABLE_PAGES).leftJoin(ID, TABLE_PAGES_USERS, PAGE_ID).where(USER_ID, equal(userId)); + for (var key : keys) query.where(TITLE, like("%" + key.replaceAll("[ÄäÖöÜüß]", "%") + "%")); + var rs = query.exec(db); + while (rs.next()) { + var page = WikiPage.of(rs); + map.put(page.id(), page); + } + rs.close(); + } + if (fulltext) { + var query = select(ALL).from(TABLE_PAGES).leftJoin(ID, TABLE_PAGES_USERS, PAGE_ID).where(USER_ID, equal(userId)); + for (var key : keys) query.where(CONTENT, like("%" + key.replaceAll("[ÄäÖöÜüß]", "%") + "%")); + var rs = query.exec(db); + while (rs.next()) { + var page = WikiPage.of(rs); + map.put(page.id(), page); + } + rs.close(); } - rs.close(); return map; } catch (SQLException e) { throw failedToSearchDb(t(WIKI_PAGES)).causedBy(e);