Sign inSign up

tkachenkoivan/searchfonetic

By tkachenkoivan

•Updated over 5 years ago

Фонетические алгоритмы Soundex и Metaphone. Платформа Manticore Search/Sphinx Search

Image
0

961

tkachenkoivan/searchfonetic repository overview

⁠Описание

Образ создан для демонстрации работы фонетических алгоритмов 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⁠.

⁠Использование

Список доступных индексов:

  • simple_soundex
  • refined_soundex
  • nysiis
  • daitch_mokotoff_soundex
  • metaphone
  • rus_metaphone
  • caverphone

Проиндексированы одни и те же данные, разными алгоритмами, - улицы города Тюмень.

Укажите название индекса в запросе, примеры ниже.

⁠HTTP

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

Вначале скачаем и установим 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)

⁠См. также

Tag summary

Content type

Image

Digest

Size

63.2 MB

Last updated

over 5 years ago

docker pull tkachenkoivan/searchfonetic