Sphinx, как искать по одному общему полю фио?

У нас есть база, где в одном поле, хранится фио, причем фамилия, имя или отчество может отсутствовать, может просто "Петров" быть. Времени переделать базу нет она обширная.

Нужно правильно настроить релевантность поиска. И настроить веса для фамилии, имени и отчеству, но как это сделать с одним полем?

Сейчас при вводе Иванов
Может вывести например: Алексеев Андрей Иванович
А нужно чтобы вверху были только Ивановы, а остальное внизу.

Прошу помощи.
  • Вопрос задан
  • 606 просмотров
Решения вопроса 1
@Pro_snap Автор вопроса
Проблема что в фио может быть только одно из составляющих

Решение:

Настройки на nodejs:
sphinx.SetMatchMode(SphinxClient.SPH_MATCH_EXTENDED2);
sphinx.SetRankingMode(SphinxClient.SPH_RANK_WORDCOUNT);
sphinx.SetSortMode(SphinxClient.SPH_SORT_EXTENDED, "@weight DESC");


Конфиг sphinx:
source source_test
{
 type   = pgsql

 sql_query  = SELECT id, fio FROM testTable
 sql_attr_string = fio
}

index index_test
{
 source   = test
 min_infix_len  = 3
 index_exact_words = 1
 infix_fields  = fio
 charset_type  = utf-8
}


и выполняем запрос:

//формируем строку вида "^иванов*" | "*иванов*" и делаем запрос
var name = "\"^" + req.params.name + "*\" | \"*" + req.params.name + "*\"";
sphinx.Query(name, function (err, result) {
   ...
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Fortop
Tech/Team lead
^Иванов

При условии что фамилия всегда у вас первая.
Если это не так, то задача не решаема
Ответ написан
opium
@opium
Просто люблю качественно работать
Да в целом никак если у вас база ни разу не приведена в порядок задать какой то приоритет крайне сложно, то есть надо сперва искать, а потом уже в программе делать сортировку нужную.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы