كيفية تشغيل البحث النصي الشامل في Nextcloud, خاصه عند استخدام Docker والبحث باللغة العربية غير واضحه.
لذلك كتبت هذا الشرح, ليشرح كيفيه تشغيله, مع استخدام Docker, Elasticsearch و Tesseract, ودعم العربية.
هذا المقال متوفر ايضا على مجتمع أسس هنا
أضف tesseract لحاوية Nextcloud
المعتاد عند اضافة اي شيء لحاوية دوكر, ان تقوم بعمل صورة مخصصة, لكن modzilla99 و Schw3pps اكتشفو طريقة لإضافة الحزم دون الحاجة لصورة مخصصه, وهي عبر وضع أمر
command
مخصص للحاوية.
latest/apache صورة
1
| command: sh -c "apt update && apt-get install -y --no-install-recommends tesseract-ocr tesseract-ocr-eng tesseract-ocr-ara tesseract-ocr-$(YOUR_THREE_LETTER_LANGUAGE_CODE) && /entrypoint.sh apache2-foreground"
|
ملاحظة: إذا كنت تريد إضافة Cron, لا تحتاج حاوية منفصله, استخدم supervisor
1
| command: sh -c "apt update && apt-get install -y --no-install-recommends tesseract-ocr tesseract-ocr-eng tesseract-ocr-ara tesseract-ocr-$(YOUR_THREE_LETTER_LANGUAGE_CODE) && mkdir -p /var/log/supervisord && mkdir -p /var/run/supervisord supervisor && supervisord -c /supervisord.conf"
|
تأكد من وصل هذا الملف للحاوية ك/supervisord.conf
fpm-alpine صورة
1
| command: -c "apk add --no-cache tesseract-ocr tesseract-ocr-data-eng tesseract-ocr-data-ara tesseract-ocr-$(YOUR_THREE_LETTER_LANGUAGE_CODE); /entrypoint.sh php-fpm"
|
واذا تستخدم حاوية منفصله لCron, اضف هذا لها
1
| command: -c "apk add --no-cache tesseract-ocr tesseract-ocr-data-eng tesseract-ocr-data-ara tesseract-ocr-$(YOUR_THREE_LETTER_LANGUAGE_CODE); /cron.sh"
|
إعداد Elasticsearch
docker-compose.yml
اضف هذا لنفس مِلَفّ الذي تستخدم لتشغيل Nextcloud
لتجنب اي مشاكل, تأكد ان Nextcloud يعتمد على Elasticsearch, حتى يتم تشغيله قبل ان يتم تشغيل Nextcloud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10
networks:
default:
# ports:
# 127.0.0.1:9200:9200 #only needed if you are connecting through a docker network
command: sh -c "bin/elasticsearch-plugin install --batch ingest-attachment; /bin/tini -s /usr/local/bin/docker-entrypoint.sh eswrapper"
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx2048m"
user: 1000:1000
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch:/usr/share/elasticsearch/data
volumes:
elasticsearch:
|
بنفس الطريقة السابقة, ننزل الإضافةingest-attachment
دون الحاجة لصورة مخصصه.
في حالة إعادة تشغيل الحاوية, سيكون هناك خطا لأنه سيحاول إعادة تثبيت الإضافة, لكنها ستكمل العمل.
إعداد Nextcloud
أختر Elasticsearch كمنصة بحث
وإذا تحتاج احد اللغات ل Tokenizer مخصص, بإمكانك تغييره
الخيارات الأخرى غير مهمه, وبإمكانك تغييرها حسب احتياجاتك.
أبدء بفهرسه الملفات
التأكد ان كل شيء يعمل
1
| ./occ fulltextsearch:test
|
فِهْرِس كل الملفات
1
| ./occ fulltextsearch:index
|
الفهرسة التلقائية للملفات الجديدة
الشرح الرسمي فيه قسم مخصص لتشغيل الفهرسة التلقائيه بستخدام Cron:
https://github.com/nextcloud/fulltextsearch/wiki/Basic-Installation#live-index-service
لكن بما اننا نستخدم صورة دوكر, مع supervisor, شرح robeatoz طريقة لإضافة أمر fulltextsearch:live
لملف supervisord.conf.
fulltextsearch.sh
أنشئ ملف اسمه fulltextsearch.sh
1
2
3
4
5
6
7
| #!/bin/sh
# Stop all running indexes
php /var/www/html/occ fulltextsearch:stop
# Start live index
php /var/www/html/occ fulltextsearch:live
# More information: https://github.com/nextcloud/fulltextsearch/wiki/Commands
|
supervisord.conf
أضف هذا لنهاية الملف
1
2
3
4
5
6
7
| [program:fulltextsearch_index_live]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
user=www-data
command=/bin/sh /fulltextsearch.sh
|
docker-compose.yml
أوصل ملف fulltextsearch.sh
بالحاوية
1
2
3
| volumes:
- ....
- ./fulltextsearch.sh:/fulltextsearch:ro
|
والان اصبح لديك فهرسه تلقائيه لبحث نصي كامل!
المصادر
https://github.com/nextcloud/docker/issues/1724