From 77047bab4318200380b4e33e83b259a78f8ff6a6 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Mon, 17 Nov 2025 17:04:29 +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