Задача: Хочу получить нормальный поиск по документам при обращении к ним через 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

Устанавливаю приложение Full Text Search из Market OwnCloud

Либо через консоль

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

Индексирование успешно активировано

Индексирование началось.

В документации обозначение ограничения, ну куда же без них:

Известные ограничения

  1. В настоящее время у приложения есть несколько известных ограничений; эти:
  2. Файлы отображаются дважды в результатах поиска при поиске по имени файла.
  3. Если совместно используемый файл переименован совместно используемым пользователем (получателем совместно используемого ресурса), он не может найти файл, используя новое имя файла.
  4. Если поисковый запрос не соответствует началу хотя бы одного слова в имени доступного файла, результаты не возвращаются.
  5. Результаты поиска не обновляются при откате текстового файла до более ранней версии.
  6. Приложение не возвращает результаты для файлов федеративного общего доступа.
  7. Приложение работает только с модулем шифрования по умолчанию «Мастер-ключ».

Если вы хотите найти документ, введите поисковый запрос в поле поиска в правом верхнем углу веб-интерфейса ownCloud. Вы можете запустить поиск с любой страницы ownCloud. Наведите курсор на любой из результатов поиска, чтобы увидеть, в какой папке он находится, или щелкните имя файла, и вы перейдете в папку.

Итого я себе настроил полнотекстовой поиск в собственном облачном хранилище OwnCloud. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.