Запрос похожих значений.

Тема в разделе "Базы данных", создана пользователем brutka, 9 окт 2011.

Модераторы: latteo
  1. brutka

    brutka Создатель

    Регистр.:
    16 июл 2008
    Сообщения:
    281
    Симпатии:
    13
    Имею список городов, cities (id, name), в котором ряд городов дублируется, но не с полным соответствием, а с минимальными расхождениями.
    Помогите, пожалуйста, составить запрос на получение дублированных названий, с расхождением в 1 или 2 буквы.
    Например, из:
    1 Москва
    2 Масква
    3 Питер
    4 Моксква
    5 Москоу

    должен вернуть 1, 2, 4
     
  2. Soul :)

    Soul :) Постоялец

    Регистр.:
    22 мар 2007
    Сообщения:
    86
    Симпатии:
    9
    SOUNDEX() ?
    Кстати, не уверен, как эта функция будет работать с русскоязычным текстом.

    Если нет, то расстояние Левенштайна - то что Вам нужно. Но в ничего не слышал о его наличии в Мускуле. Есть в ПХП. Но учтите, что перебирать прийдется очень долго, и если это не разовая операция - то не годится.
     
    brutka нравится это.
  3. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Аналогичную задачу (поиск неполных соответствий слов, в т.ч. русских) - когда-то решил с помощью установки Sphinx и построения соответствующих индексов. Поиск неточных совпадений с его помощью - 3 строчки кода + конечно до них некоторое время на въезжание/форумы по сфинксу, но на больших объемах - оправдывает потраченное на 100%. В мускуле же для этого есть FULLTEXT индекс и MATCH AGAINST - но по быстродействию они сильно проигрывают сфинксу.
     
    brutka нравится это.
  4. brutka

    brutka Создатель

    Регистр.:
    16 июл 2008
    Сообщения:
    281
    Симпатии:
    13
    начальные ключевые слова для дальнейших "раскопок" получил, спасибо.
    база Postgresql, операция не частая, но не разовая... буду пробовать