Определение похожих матриалов по словам в заголовке. Есть ли решение?

Главные вкладки

Аватар пользователя VasyOK VasyOK 31 декабря 2022 в 1:42

С наступающим всех!

Обычно для вывода блока "похожих" материалов использую модуль similarterms, но вот один товарищ хочет видеть на сайте блок с нодами похожесть которых определяется не термином а схожими словами в заголовке.

Есть ли решение?

Комментарии

Аватар пользователя marassa marassa 31 декабря 2022 в 14:24

То есть заголовки "Маск купил Твиттер" и "Покупка Твиттера Маском" не имеют вообще ничего общего? Тогда еще проще - обычный Search API с db backend.

Аватар пользователя VasyOK VasyOK 31 декабря 2022 в 19:46

marassa wrote: заголовки "Маск купил Твиттер" и "Покупка Твиттера Маском" не имеют вообще ничего общего?

Да.
Похожие это "Маск купил Твиттер" и "Вася купил пива".
Нутром чую можно без Search API.

Аватар пользователя marassa marassa 2 января 2023 в 17:52
1

https://www.drupal.org/docs/8/modules/search-api-solr/search-api-solr-ho...

PS Упс, "more like this" только с solr-бэкендом работает, если верить документации.
Ну тогда просто контекстный фильтр, которому подсунуть заголовок текущей ноды. Возможно через tokens это получится.
Я просто описываю как бы я пробовал делать если бы мне это было нужно. Я этого никогда не делал, и делать сейчас не имею возможности.

Аватар пользователя Andruxa Andruxa 3 января 2023 в 10:47
1

Да, все верно, тут солр очень подходит, например заголовки "Маск собритается купить Твиттер", "Маск покупает Твиттер" и "Маск купил Твиттер" говорят об одном и том же событии, просто в разные отметки времени, т.е. - релевантнее некуда.
"Леня Голубков приобрел акции АО МММ" - тоже похожий по смыслу заголовок.
То есть, нужно учитывать морфологию слов (купить - покупает - купил) и синонимы (купил - приобрел).
Это как раз работа для солра.

Аватар пользователя VasyOK VasyOK 3 января 2023 в 2:26

У меня есть в голове идея взять заголовок ноды черeз views и исходя из этого заголовка вывести результаты поиска.

Можно как-то использовать контекстный фильтр Search: Search Keywords от ядра Друпала и Search: Fulltext от search api?

Аватар пользователя VasyOK VasyOK 4 января 2023 в 4:18

Ок, подскажите: как поставить SOLR?

Инструкцию нашел тут.
https://www.drupal.org/docs/8/modules/search-api-solr/search-api-solr-ho...
Окружение - docker4drupal

Отсюда https://solr.apache.org/downloads.html взял Binary releases, распаковал в папку SOLR_version в ту же папку где composer.json проекта (или надо в web/ ? )

Настройки search api сервера:

Пишет.
The Solr server could not be reached or is protected by your service provider.

При попытке получить config.zip выдает:
An error occurred during the creation of the config.zip. Look at the logs for details.

В журнале:
Drupal\search_api_solr\SearchApiSolrException: The config-set could not be created because the targeted Solr version is missing. In case of an auto-detection of the version the Solr server might not be running or is not reachable or the API is blocked (check the log files). As a workaround you can manually configure the targeted Solr version in the settings. in Drupal\search_api_solr\Controller\SolrConfigSetController->getConfigFiles() (line 296 of /var/www/html/web/modules/contrib/search_api_solr/src/Controller/SolrConfigSetController.php).

Что делать?

Аватар пользователя VasyOK VasyOK 4 января 2023 в 15:07

Да, раскомментровал перед действиями предыдущего комментария. Ошибка в предыдущем комменте остается.

Аватар пользователя VasyOK VasyOK 4 января 2023 в 20:13

Раскомментировал zookeeper в docker-compose.yml.

Создал новый сервер с настройками:

Password - придумал

Upload Configset:

В результате наблюдаю:
Server Connection

The Solr server could be reached.

Collection Connection

The Solr collection could not be accessed. Further data is therefore unavailable.

Additional information
An error occurred while trying to retrieve additional information from the Solr server: Solr endpoint http://solr:8983/ not found (code: 404, body: <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> <title>Error 404 Not Found</title> </head> <body><h2>HTTP ERROR 404 Not Found</h2> <table> <tr><th>URI:</th><td>/solr/default/admin/luke</td></tr> <tr><th>STATUS:</th><td>404</td></tr> <tr><th>MESSAGE:</th><td>Not Found</td></tr> <tr><th>SERVLET:</th><td>default</td></tr> </table> </body> </html> , message: Solr HTTP error: OK (404) <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> <title>Error 404 Not Found</title> </head> <body><h2>HTTP ERROR 404 Not Found</h2> <table> <tr><th>URI:</th><td>/solr/default/admin/luke</td></tr> <tr><th>STATUS:</th><td>404</td></tr> <tr><th>MESSAGE:</th><td>Not Found</td></tr> <tr><th>SERVLET:</th><td>default</td></tr> </table> </body> </html> ).

Но так же не должно быть?

Аватар пользователя VasyOK VasyOK 7 января 2023 в 3:47

А если рассмотреть работу не на D4D, а на реальном сервере, то как?
Solr должен быть в ОС сервера добавлен или отсюда его качать https://solr.apache.org/downloads.html ?
Если качать, то Binary releases? В ту же папку, что и composer.json лежит или в web?

Аватар пользователя gun_dose gun_dose 7 января 2023 в 12:26

Drupal - это php приложение, а solr - это java-приложение, поэтому solr нужно устанавливать не в друпал, а в операционную систему.

Аватар пользователя Andruxa Andruxa 8 января 2023 в 9:54

Да, качаешь оттуда последнюю версию, под которую в search_api_solr есть темплейты конфигов, т.е. - Solr 8.11.2.zip и кладешь ее в /opt
Из архива достаешь скрипт bin/install_solr_service.sh и кладешь его в /opt рядом с архивом, задаешь ему право на исполнение, если сразу нет: chmod +x /opt/install_solr_service.sh и запускаешь от рута: /opt/install_solr_service.sh
скрипт создаст пользователя solr и все необходимые сервисы. Ядра будут лежать в /var/solr/data/, в поддиректории /var/solr/data/<corename>/conf надо будет потом подкидывать друпальные конфиги. Все правки там делаются от пользователя solr: sudo su - solr

Затем можно в /etc/default/solr.in.sh поменять хост на 127.0.0.1, чтобы солр не светил наружу.

Аватар пользователя VasyOK VasyOK 7 января 2023 в 15:52

Поставить solr - это просто архив распаковать? Если да то вроде ж директория не особо важна?

Собственно команда
SOLR_version/bin/solr start -e cloud -noprompt

Выдает:

Welcome to the SolrCloud example!

Starting up 2 Solr nodes for your example SolrCloud cluster.

Creating Solr home directory /var/www/sitename.com/SOLR_version/example/cloud/node1/solr
Cloning /var/www/sitename.com/SOLR_version/example/cloud/node1 into
   /var/www/sitename.com/SOLR_version/example/cloud/node2

Starting up Solr on port 8983 using command:
"/var/www/sitename.com/SOLR_version/bin/solr" start -cloud -p 8983 -s "SOLR_version/example/cloud/node1/solr"

WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting.
         Please consult the Reference Guide. To override this check, start with argument '-force'

ERROR: Failed to start Solr using command: "/var/www/sitename.com/SOLR_version/bin/solr" start -cloud -p 8983 -s "SOLR_version/example/cloud/node1/solr" Exception : org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)

Что ему не хватает?

Аватар пользователя VasyOK VasyOK 13 января 2023 в 4:52

Поставили с на сервере, благодаря voviko. Да надо бы мануал запилить, но пока в этом плаваю.

Вырисовался такой вопрос:

Во вьюхе на search api индекса с контекстным фильтром more like this не работает сортировка ни по дате ни по ID нод. Это так и надо или что-то можно предпринять?

Аватар пользователя gun_dose gun_dose 13 января 2023 в 19:11

Вероятно сортировка не работает из-за того, что more like this в первую очередь сортирует по "похожести", а остальные сортировки идут потом. Но это только предположение.