Задача: Хочу получить нормальный поиск по документам при обращении к ним через Web
-интерфейс OwnCloud 10
. А не тот что есть по умолчанию, где введенное слово по разобранной заметке просто напросто не находит заметку, а она есть. Я перехожу в каталог где она и вот она. В роли системы индексирования выступит ElasticSearch
+ приложение из Market Full Text Search
. Только к текущему сервису OwnCloud на моей системе виртуализации необходимо будет добавить побольше оперативной памяти от 4Gb
и крайне желательно перевести жесткий диск на ZFS (RAID 1)
+ диск SSD
под Cache
. Так сделал я и пока доволен результатом. Если кто хочет сделать у себя так же то прошу к моим приватным заметкам блога https://lin.ekzorchik.ru
Сперва на тестовой системе все обкатываю, а как будет практический результат эта же заметка применится к боевому использованию.
ekzorchik@srv-bionic:~$ hg clone http://srv-wiki/hg/ownproject ekzorchik@srv-bionic:~/ownproject$ cd ~ ekzorchik@srv-bionic:~$ cd ownproject/ ekzorchik@srv-bionic:~/ownproject$ sudo ./own_apache.sh
версию OwnCloud
использую: owncloud-complete-files_10.8.0-1+1.1_all.deb
Проделываю согласно https://doc.owncloud.com/server/admin_manual/configuration/search/
Открываю в браузере ссылку https://marketplace.owncloud.com
– нахожу приложение Full Text Viewer
и нажимаю Download
, скачивается на основную систему search_elastic-1.0.0.tar.gz
, перемещаю его на систему с развернутым OwnCloud
(хорошо бы если в локальной сети на srv-bionic
был бы smb
сервис развернут, но если его нет).
ekzorchik@srv-bionic:~$ sudo apt-get install -y cifs-utils
Если Window 10
то я создал папку и сделал ее доступной для всех на чтение и запись:
C:\Users\ekzorchik>icacls c:\1 c:\1 CREATOR OWNER:(OI)(CI)(IO)(F) NT AUTHORITY\SYSTEM:(OI)(CI)(F) EKZORCH-BONSNLS\ekzorchik:(F) BUILTIN\Administrators:(OI)(CI)(F) Everyone:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Подключаю расшаренную папку в Windows 10 Pro
к Ubuntu 18.04 Server:
ekzorchik@srv-bionic:~$ sudo mount.cifs -o vers=1.0 \\\\172.33.33.108\\1 /home/ekzorchik/share -o username=ekzorchik,password=712mbddr@,domain=workgroup
копирую в папку 1
скачанный пакет search_elastic-1.0.0.tar.gz
,
ekzorchik@srv-bionic:~$ ls share/ search_elastic-1.0.0.tar.gz ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ cp share/search_elastic-1.0.0.tar.gz ~/ ekzorchik@srv-bionic:~$ tar zxf search_elastic-1.0.0.tar.gz ekzorchik@srv-bionic:~$ sudo mv search_elastic /var/www/owncloud/apps ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/owncloud/apps/search_elastic/
после перехожу в https://IP&DNS – user&pass – (User) Settings – (Admin) Apps
– нажимаю Show disabled apps
– вижу добавленное приложение и нажимаю Enable
Либо через консоль
ekzorchik@srv-bionic:~$ sudo -u www-data php /var/www/owncloud/occ app:enable search_elastic search_elastic enabled
Доступные команды управления через консоль:
ekzorchik@srv-bionic:~$ sudo -u www-data php /var/www/owncloud/occ app:rebuild search_elastic Command "app:rebuild" is not defined. Did you mean one of these? app:check-code app:disable app:enable app:getpath app:list ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ sudo -u www-data php /var/www/owncloud/occ app:list search_elastic Enabled: - search_elastic: - Version: 1.0.0 - Path: /var/www/owncloud/apps/search_elastic ekzorchik@srv-bionic:~$
После активирую на работу:
Для приложения search_elastic
существует только одно предварительное условие — это полностью функционирующий сервер Elasticsearch
с присутствующим процессором загрузки и прикрепления. Процессор загрузки-вложения позволяет Elasticsearch
извлекать файловые вложения в распространенных форматах, таких как PPT, XLS и PDF. Из этого следует, что нужно на сервер установил Elasticsearch
, но есть нюанс из документации, полностью поддерживается только Elasticsearch
версии 5.6
. Версии 6 и 7 еще не поддерживаются.
Устанавливаю OpenJDK
версии 8:
ekzorchik@srv-bionic:~$ sudo apt-get install -y openjdk-8-jdk
Добавляю GPG
ключ для ElasticSearch:
ekzorchik@srv-bionic:~$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - OK ekzorchik@srv-bionic:~$
Устанавливаю компоненты apt
для работы через https:
ekzorchik@srv-bionic:~$ sudo apt-get install -y apt-transport-https
Добавляю в систему репозитарии где есть 5
версия Elastic Search:
ekzorchik@srv-bionic:~$ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list deb https://artifacts.elastic.co/packages/5.x/apt stable main ekzorchik@srv-bionic:~$
Обновляю информацию по репозитариям с учетом добавления и устанавливаю Elastic Search:
ekzorchik@srv-bionic:~$ sudo apt-get update ekzorchik@srv-bionic:~$ apt-cache show elasticsearch | grep Version | grep 'Version: 5*' | head -n 2 Version: 5.6.16 Version: 5.6.15 ekzorchik@srv-bionic:~$
Версий для установки много, я же буду ставить самую последнюю из пятого релиза:
ekzorchik@srv-bionic:~$ sudo apt-get install -y elasticsearch
Даю доступ установленному на запуск вместе с системой при перезагрузки/загрузки:
ekzorchik@srv-bionic:~$ sudo systemctl daemon-reload ekzorchik@srv-bionic:~$ sudo systemctl enable elasticsearch.service Synchronizing state of elasticsearch.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable elasticsearch Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service. ekzorchik@srv-bionic:~$ sudo systemctl restart elasticsearch.service
После можно посмотреть лог на предмет работы сервиса:
ekzorchik@srv-bionic:~$ sudo tail -f /var/log/elasticsearch/elasticsearch.log [2021-09-02T16:40:09,413][INFO ][o.e.p.PluginsService ] [URq6Ngx] loaded module [transport-netty4] [2021-09-02T16:40:09,414][INFO ][o.e.p.PluginsService ] [URq6Ngx] no plugins loaded [2021-09-02T16:40:11,818][INFO ][o.e.d.DiscoveryModule ] [URq6Ngx] using discovery type [zen] [2021-09-02T16:40:12,500][INFO ][o.e.n.Node ] initialized [2021-09-02T16:40:12,500][INFO ][o.e.n.Node ] [URq6Ngx] starting ... [2021-09-02T16:40:12,667][INFO ][o.e.t.TransportService ] [URq6Ngx] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300} [2021-09-02T16:40:15,740][INFO ][o.e.c.s.ClusterService ] [URq6Ngx] new_master {URq6Ngx}{URq6NgxyRc2Kf15VKc927A}{tl06p49bS3eTkDCvmGqT2w}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined) [2021-09-02T16:40:15,781][INFO ][o.e.h.n.Netty4HttpServerTransport] [URq6Ngx] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200} [2021-09-02T16:40:15,782][INFO ][o.e.n.Node ] [URq6Ngx] started [2021-09-02T16:40:15,791][INFO ][o.e.g.GatewayService ] [URq6Ngx] recovered [0] indices into cluster_state ^C ekzorchik@srv-bionic:~$
Если в логах все хорошо, то можно через утилиту curl
обратиться к ElasticSearch
сервису:
ekzorchik@srv-bionic:~$ sudo netstat -tulpn | grep java tcp6 0 0 127.0.0.1:9200 :::* LISTEN 4203/java tcp6 0 0 ::1:9200 :::* LISTEN 4203/java tcp6 0 0 127.0.0.1:9300 :::* LISTEN 4203/java tcp6 0 0 ::1:9300 :::* LISTEN 4203/java ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ curl -XGET 'localhost:9200/?pretty' { "name" : "URq6Ngx", "cluster_name" : "elasticsearch", "cluster_uuid" : "OghhZa5nQyC-k-z0iHtRwA", "version" : { "number" : "5.6.16", "build_hash" : "3a740d1", "build_date" : "2019-03-13T15:33:36.565Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" } ekzorchik@srv-bionic:~$
Отлично, работает. Возвращаемся к Web
-интерфейсу настроек Owncloud
и запускаем индексирование:
https://IP&DNS – user&pass – (User) Settings – (Admin) Search
и нажимаю Setup index
Но я получаю сообщение
Could not setup indexes
No processor type exists with name [attachment]
Что не так? Разбираюсь…
Решение: из документации по установки я просто проигнорировал выполнение этой команды
ekzorchik@srv-bionic:~$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -> Downloading ingest-attachment from elastic [=================================================] 100% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.lang.RuntimePermission accessClassInPackage.sun.java2d.cmm.kcms * java.lang.RuntimePermission accessDeclaredMembers * java.lang.RuntimePermission getClassLoader * java.lang.reflect.ReflectPermission suppressAccessChecks * java.security.SecurityPermission createAccessControlContext * java.security.SecurityPermission insertProvider * java.security.SecurityPermission putProviderProperty.BC See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks. Continue with installation? [y/N]y -> Installed ingest-attachment ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ sudo systemctl restart elasticsearch.service
и после нажав Setup Index
Индексирование началось.
В документации обозначение ограничения, ну куда же без них:
Известные ограничения
- В настоящее время у приложения есть несколько известных ограничений; эти:
- Файлы отображаются дважды в результатах поиска при поиске по имени файла.
- Если совместно используемый файл переименован совместно используемым пользователем (получателем совместно используемого ресурса), он не может найти файл, используя новое имя файла.
- Если поисковый запрос не соответствует началу хотя бы одного слова в имени доступного файла, результаты не возвращаются.
- Результаты поиска не обновляются при откате текстового файла до более ранней версии.
- Приложение не возвращает результаты для файлов федеративного общего доступа.
- Приложение работает только с модулем шифрования по умолчанию «Мастер-ключ».
Если вы хотите найти документ, введите поисковый запрос в поле поиска в правом верхнем углу веб-интерфейса ownCloud
. Вы можете запустить поиск с любой страницы ownCloud
. Наведите курсор на любой из результатов поиска, чтобы увидеть, в какой папке он находится, или щелкните имя файла, и вы перейдете в папку.
Итого я себе настроил полнотекстовой поиск в собственном облачном хранилище OwnCloud
. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.