Sphinx + php, проблема с неожиданными результатами запроса - PullRequest
0 голосов
/ 19 июля 2011

Я работаю над полем автозаполнения с поддержкой sphinx (php), который просматривает пользователей. Я сталкиваюсь с некоторыми странными ситуациями, когда определенные входные данные, которые должны возвращать совпадения, этого не делают.

Поля в моем индексе пользователей:

'fullname',
'username',
'address',
'phone',
'email'

Общая информация о конфигурации:

charset_type = utf-8
enable_star    = 1
min_infix_len  = 3
ignore_chars = U+20

Мой текущий запрос настроен следующим образом:

$search = preg_replace('/([^\s]{3,})/', '*$1*', preg_replace('/[^a-z ]/i', '', $search));
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$matches = $sphinx->Query($search . ' @email company.com', 'users');

Проблема связана со следующими параметрами поиска:

John -> returns list of all Johns (GOOD!)
John S -> returns nothing (BAD!)
John St -> returns all John St*'s (GOOD!)

Аналогично:

Ben -> returns all Ben's (GOOD!)
Ben M -> returns nothing (BAD!)
Ben Ma -> returns nothing (BAD!)
Ben Mar -> returns user with Ben Mar*'s (GOOD!)

Изначально я думал, что проблема в том, что имя и фамилия были в разных полях индекса, но теперь, когда я объединил их в поле полного имени, я все еще получаю точно такие же результаты.

В настоящее время (через вышеупомянутый preg_replace) я заключаю каждое слово, введенное в *. Я также попытался просто обернуть всю строку с *,

$search = '*' . $search . '*';

но с менее точными результатами. Я пробовал другие режимы поиска, кроме extended2, но не повезло. (Это только ухудшается) Я добавил опцию, чтобы игнорировать пробелы в конфиге, надеясь, что он выберет такие вещи, как «Джон С», но все равно не повезло.

В основном, я бы хотел, чтобы люди могли найти пользователя, набрав «Имя» + «Фамилия». Это обычный способ, которым люди пытаются искать имена пользователей, и в настоящее время они не могут.

Любая помощь очень ценится. Спасибо!

EDIT:

В большом поиске я нашел это: http://sphinxsearch.com/forum/view.html?id=5757

Кажется, могут быть некоторые ошибки / несоответствия при поиске с пробелами. Но если у кого-то есть идеи, пожалуйста, прокомментируйте. Спасибо!

1 Ответ

0 голосов
/ 20 июля 2011

Включить частичное индексирование.

Посмотрите вокруг: min_infix_len min_prefix_len

...