aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/redis_scripts
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2023-12-07 15:01:11 +0000
committerVsevolod Stakhov <vsevolod@rspamd.com>2023-12-07 15:01:11 +0000
commit0d993187c1b1b37cfd99d3212745927eea0bff7a (patch)
treedd11da9a27a4c4df441db53370e16850d48e02ea /lualib/redis_scripts
parent3a7f4ef0ed9fb2583387c0fbcc7fc28ab403b3bc (diff)
downloadrspamd-0d993187c1b1b37cfd99d3212745927eea0bff7a.tar.gz
rspamd-0d993187c1b1b37cfd99d3212745927eea0bff7a.zip
[Project] Add bayes learn script
Diffstat (limited to 'lualib/redis_scripts')
-rw-r--r--lualib/redis_scripts/bayes_learn.lua25
1 files changed, 25 insertions, 0 deletions
diff --git a/lualib/redis_scripts/bayes_learn.lua b/lualib/redis_scripts/bayes_learn.lua
new file mode 100644
index 000000000..2b74fcca9
--- /dev/null
+++ b/lualib/redis_scripts/bayes_learn.lua
@@ -0,0 +1,25 @@
+-- Lua script to perform bayes learning
+-- This script accepts the following parameters:
+-- key1 - prefix for bayes tokens (e.g. for per-user classification)
+-- key2 - boolean is_spam
+-- key3 - string symbol
+-- key4 - boolean is_unlearn
+-- key5 - set of tokens encoded in messagepack array of int64_t
+
+local prefix = KEYS[1]
+local is_spam = KEYS[2]
+local symbol = KEYS[3]
+local is_unlearn = KEYS[4]
+local input_tokens = cmsgpack.unpack(KEYS[5])
+
+local prefix_underscore = prefix .. '_'
+local hash_key = is_spam and 'S' or 'H'
+local learned_key = is_spam and 'learns_spam' or 'learns_ham'
+
+redis.call('SADD', symbol .. '_keys', prefix)
+redis.call('HSET', prefix, 'version', '2') -- new schema
+redis.call('HINCRBY', prefix, learned_key, is_unlearn and -1 or 1) -- increase or decrease learned count
+
+for _, token in ipairs(input_tokens) do
+ redis.call('HINCRBY', prefix_underscore .. tostring(token), hash_key, 1)
+end \ No newline at end of file