कई डेटाबेस और खोज इंजन आपको अपने स्वयं के “उपयोगकर्ता परिभाषित फ़ंक्शन” या UDF का उपयोग करके अपने क्वेरी को अनुकूलित करने की अनुमति देते हैं। Sphinx और Manticore कोई अपवाद नहीं हैं। इसके बारे में दस्तावेज़ में एक लंबा अनुभाग है - https://manual.manticoresearch.com/Extensions/UDFs_and_Plugins/UDF#UDF
यहां मैं एक UDF का एक त्वरित उदाहरण देना चाहता हूं जो कुछ ऐसी कार्यक्षमता को सक्षम करता है जो कुछ मामलों में वास्तव में उपयोगी हो सकती है, लेकिन बाहर से बॉक्स में उपलब्ध नहीं है - sleep() फ़ंक्शन।
सबसे पहले अपने UDF का कोड C में बनाएं:
[snikolaev@dev01 ~]$ cat sleep.c
#include </home/snikolaev/./manticore_gitlab/src/sphinxudf.h>
int sleep_ver() {
return SPH_UDF_VERSION;
}
sphinx_int64_t sleep ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_flag ) {
usleep(*args->arg_values[0] * 1000000);
}
जैसा कि आप देख सकते हैं, इसमें केवल 2 फ़ंक्शन हैं:
sleep_ver()
शामिल किए गएsphinxudf.h
से वर्तमानSPH_UDF_VERSION
को वापस करता है- और
sleep()
जो काम करता है - तर्क #1 में प्रदान किए गए सेकंड की संख्या सोता है
संकेत: सुनिश्चित करें कि आपकी फ़ाइल का एक्सटेंशन “.c” है, “.cpp” नहीं, अन्यथा यह काम नहीं कर सकता।
इसके बाद आपको अपनी पुस्तकालय बनानी होगी:
[snikolaev@dev01 ~]$ gcc sleep.c -shared -o sleep.so -g -fPIC
[snikolaev@dev01 ~]$
अब आपके पास sleep.so
है जिसमें आपका फ़ंक्शन शामिल है:
[snikolaev@dev01 ~]$ ls -la sleep.so
-rwx--x--x 1 snikolaev snikolaev 8209 Sep 10 04:37 sleep.so
इसके बाद सुनिश्चित करें कि आप अपने कॉन्फ़िग में निर्दिष्ट करते हैं कि searchd को plugin_dir निर्देश का उपयोग करके UDF के लिए कहां देखना है:
common {
plugin_dir = /home/snikolaev
}
अब searchd शुरू करें और फ़ंक्शन बनाएं:
mysql> create function sleep returns int soname 'sleep.so';
Query OK, 0 rows affected (0.00 sec)
संकेत: यदि आप इसे हर बार searchd शुरू करते समय नहीं करना चाहते हैं तो आप आदेश को एक फ़ाइल में रख सकते हैं:
[snikolaev@dev01 ~]$ cat state.sql
CREATE FUNCTION sleep RETURNS INT SONAME 'sleep.so';
और उपयोग करें
sphinxql_state = state.sql
अपने कॉन्फ़िग के searchd अनुभाग में ताकि यह शुरू करने पर आदेश चलाए।
एक बार जब फ़ंक्शन searchd में पंजीकृत हो जाता है, तो आप इसका उपयोग कर सकते हैं:
mysql> select sleep(1);
+----------+
| sleep(1) |
+----------+
| 0 |
+----------+
1 row in set (1.00 sec)
यदि Sphinx UDF के बारे में आपके कोई प्रश्न हैं तो हमारे फोरम या हमारे सार्वजनिक स्लैक चैनल पर पूछने में संकोच न करें।