Фонетические алгоритмы Soundex и Metaphone. Платформа Manticore Search/Sphinx Search
961
Образ создан для демонстрации работы фонетических алгоритмов Soundex и Metaphone, и их вариаций, на примере названий улиц.
Основан на образе manticoresearch/manticore.
К первоначальному образу был добавлен конфигурационный файл, и созданы поисковые индексы, см. github searchfonetic. Конфигурационный файл работает как на Sphinx Search, так и на Manticore Search.
Выполните запуск, например:
docker run --name search -p 9308:9308 -p 9306:9306 tkachenkoivan/searchfonetic
После запуска будут доступны порты 9308 для работы по HTTP и 9306 для работы через mysql подключение. см. Connecting to the server.
Список доступных индексов:
Проиндексированы одни и те же данные, разными алгоритмами, - улицы города Тюмень.
Укажите название индекса в запросе, примеры ниже.
curl --location --request POST 'localhost:9308/search' \
--header 'Content-Type: application/json' \
--data-raw '{"index":"rus_metaphone","query":{"match":{"*":"Линейная"}}}'
или
GET localhost:9308/sql?query=select * from rus_metaphone where match('Линейная')
{
"took": 0,
"timed_out": false,
"hits": {
"total": 1,
"hits": [
{
"_id": "5",
"_score": 1727,
"_source": {
"aoguid": "01339f2b-6907-4cb8-919b-b71dbed23f06",
"shortname": "ул",
"offname": "Линейная"
}
}
]
}
}
Вначале скачаем и установим MySql клиента https://dev.mysql.com/downloads/mysql/
Выполните подключение:
mysql -h 127.0.0.1 -P 9306 --default-character-set=utf8
В контейнере установлен mysql, можно использовать его через docker exec, но у него проблемы с кириллицей, поэтому я использую mysql установленный на хосте.
mysql> select * from rus_metaphone where match('Линийная');
+------+--------------------------------------+-----------+------------------+
| id | aoguid | shortname | offname |
+------+--------------------------------------+-----------+------------------+
| 5 | 01339f2b-6907-4cb8-919b-b71dbed23f06 | ул | Линейная |
+------+--------------------------------------+-----------+------------------+
1 row in set (0.00 sec)
mysql> call keywords('Линейная Линийная', 'rus_metaphone');
+------+------------------+------------------+
| qpos | tokenized | normalized |
+------+------------------+------------------+
| 1 | линийнаа | линийнаа |
| 2 | линийнаа | линийнаа |
+------+------------------+------------------+
2 rows in set (0.00 sec)
mysql> call qsuggest ('Линийная', 'rus_metaphone');
+--------------------+----------+------+
| suggest | distance | docs |
+--------------------+----------+------+
| линийнаа | 1 | 1 |
| линина | 2 | 1 |
| ниницкаа | 4 | 1 |
| тинистаа | 4 | 1 |
| пшиничнаа | 4 | 1 |
+--------------------+----------+------+
5 rows in set (0.00 sec)
Content type
Image
Digest
Size
63.2 MB
Last updated
over 5 years ago
docker pull tkachenkoivan/searchfonetic