Пошук українською мовою в Magento 2
Elasticsearch з коробки працює з великою кількістю мов: arabic, armenian, basque, bengali, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english, estonian, finnish, french, galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai. Але солов’їної на жаль немає.
Якщо в Magento 2 ти, як і я, користуєшься пошуком від Smile, то є спосіб навчити цей модуль української. В цьому нам допоможе плагін LemmaGen. Він підтримує 15 мов, серед яких є і українська.
Спочатку треба дізнатись версію Elasticsearch:
curl -XGET 'http://localhost:9200'
У моєму випадку це 7.17.1.
Після цього встановлюємо плагін LemmaGen для потрібної версії:
export VERSION=7.17.1
cd /usr/share/elasticsearch
bin/elasticsearch-plugin install https://github.com/vhyza/elasticsearch-analysis-lemmagen/releases/download/v$VERSION/elasticsearch-analysis-lemmagen-$VERSION-plugin.zip
Тепер додаємо підтримку української мови:
cd /etc/elasticsearch
mkdir -p lemmagen
cd lemmagen
wget https://github.com/vhyza/lemmagen-lexicons/raw/master/free/lexicons/uk.lem
Увага! При роботі локально з docker спрацював інший шлях - /usr/share/elasticsearch/config/lemmagen, але на сервері зафуричило лише якщо покласти файл в /etc/elasticsearch/lemmagen.
Далі перезапускаємо службу elasticsearch:
service elasticsearch restart
Нарешті розширюємо можливості Smile_Searchsuite.
etc/elasticsuite_analysis.xml
<?xml version="1.0"?>
<analysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Smile_ElasticsuiteCore:etc/elasticsuite_analysis.xsd">
<filters>
<filter name="lemmagen_ukrainian" type="lemmagen" language="uk">
<lexicon>uk</lexicon>
</filter>
</filters>
<analyzers>
<analyzer name="standard" tokenizer="standard" language="uk">
<filters>
<filter ref="ascii_folding" />
<filter ref="trim" />
<filter ref="word_delimiter" />
<filter ref="lowercase" />
<filter ref="lemmagen_ukrainian" />
</filters>
<char_filters>
<char_filter ref="html_strip" />
</char_filters>
</analyzer>
<analyzer name="phonetic" tokenizer="standard" language="uk">
<filters>
<filter ref="ascii_folding" />
<filter ref="trim" />
<filter ref="word_delimiter" />
<filter ref="lowercase" />
<filter ref="lemmagen_ukrainian" />
</filters>
<char_filters>
<char_filter ref="html_strip" />
</char_filters>
</analyzer>
</analyzers>
</analysis>
На цьому все - пошук українською працює ;)
P.S. Існує також плагін analysis-ukrainian, але я не розібрався з його роботою.