From 0a2afeb91d1ff61f9d9446999f8550969871becf Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Mon, 17 Nov 2025 16:27:49 +0000
Subject: [PATCH] GS-2373

---
 lib/search.js |   56 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 43 insertions(+), 13 deletions(-)

diff --git a/lib/search.js b/lib/search.js
index d054498..a6458b0 100644
--- a/lib/search.js
+++ b/lib/search.js
@@ -1,11 +1,16 @@
+const fs = require("node:fs")
 const _ = require("lodash")
 const {Index, Document, Worker} = require("flexsearch")
+
+const settings = require("../settings")
+const log = require("../logger")
 
 /////////////////////////////////////////////////////////////////////////
 
 // Message index
 const options = {
-   tokenize: "full",
+   // tokenize: "full",
+   tokenize: "forward",
    split: true,
 }
 
@@ -64,36 +69,54 @@
 }
 
 // run()
-// .then(console.log)
+// .then(log.info)
 // .catch(console.error)
 
-async function run() {
+async function run () {
    await doIndex()
-   console.log(search("latu"))
+   log.info(search("latu"))
 }
 
 /////////////////////////////////////////////////////////////////////////
 
+let indexed = false
 async function doIndex () {
    const start = Date.now()
-   console.log("++ START indexing Users...")
-   let users = require("../users.json")
-   // users = users.slice(10)
+   log.info("++ START indexing Users...")
+   const {readFromFile, file} = settings.search
+   clearIndex(idxUser)
+
+   let users
+   if (readFromFile) {
+      users = fs.readFileSync(file, "utf8")
+      users = JSON.parse(users)
+   }
+   else {
+      log.info("~~~ reading users from DB ... ~~~")
+      const db = require("./db")
+      const {data} = await db.getUsers(0, 100000)
+      log.info(`loaded ${data.length} users from DB...`)
+      users = data
+   }
 
    for (const user of users) {
       addUser(user)
       // addTags(user)
    }
-   console.log(`++ END indexing Users in ${Date.now() - start}ms`)
+   indexed = true
+   log.info(`++ END indexing Users in ${Date.now() - start}ms`)
 }
 
-function search (query) {
-   return idxUser.search(query)
+async function search (query) {
+   // when called from a cli program the search index is not initalized
+   if(!indexed) await doIndex()
+   const searchLimit = 10000
+   return idxUser.search(query, searchLimit)
 }
 
 function searchUsers (query, user) {
    // query = query.split(" ").join(" OR ") // ohne das "OR" scheint immer nur "AND" zu sein | die search option {bool:"or"} wird ignoriert
-   // console.log(`searching messages for "${query}"`)
+   // log.info(`searching messages for "${query}"`)
    return idxUser.search(`${user} ${query}`, {suggest: true})
 }
 
@@ -108,8 +131,11 @@
 /////// idxMessage FNS ////////////////////////////////////////////////////////////////
 
 function getUserString (user) {
-   const {usr_id, firstname, lastname} = user
-   return `${usr_id} ${firstname} ${lastname}`.trim()
+   const {usr_id, firstname, lastname, login, institution, department} = user
+   // if(firstname.trim()==="Adolfo") log.info(user)
+   return `${login} ${firstname} ${lastname} ${institution} ${department}`.trim()
+   // return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim() // KEINE usr_id
+   // return `${usr_id} ${firstname} ${lastname}`.trim()
 }
 
 function addUser (user) {
@@ -124,6 +150,10 @@
    remove(idxUser, usr_id)
 }
 
+function clearIndex(index) {
+   index.clear()
+}
+
 
 /////// idxTags FNS ////////////////////////////////////////////////////////////////
 

--
Gitblit v1.8.0