| | |
| | | const fs = require("node:fs") |
| | | const _ = require("lodash") |
| | | const {Index, Document, Worker} = require("flexsearch") |
| | | |
| | | const settings = require("../settings") |
| | | const fs = require("node:fs") |
| | | const log = require("../logger") |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | | |
| | |
| | | } |
| | | |
| | | // run() |
| | | // .then(console.log) |
| | | // .then(log.info) |
| | | // .catch(console.error) |
| | | |
| | | 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...") |
| | | |
| | | log.info("++ START indexing Users...") |
| | | const {readFromFile, file} = settings.search |
| | | clearIndex(idxUser) |
| | | |
| | | let users |
| | | if (readFromFile) { |
| | |
| | | users = JSON.parse(users) |
| | | } |
| | | else { |
| | | console.log("~~~ reading users from DB ... ~~~") |
| | | 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 |
| | | } |
| | | |
| | |
| | | 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) { |
| | | 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}) |
| | | } |
| | | |
| | |
| | | |
| | | function getUserString (user) { |
| | | const {usr_id, firstname, lastname, login, institution, department} = user |
| | | return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim() |
| | | // 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() |
| | | } |
| | | |
| | |
| | | remove(idxUser, usr_id) |
| | | } |
| | | |
| | | function clearIndex(index) { |
| | | index.clear() |
| | | } |
| | | |
| | | |
| | | /////// idxTags FNS //////////////////////////////////////////////////////////////// |
| | | |