Как реализовать «Подсказки» в сфинксе?

Здравствуйте,
у нас имеется большая база поисковых запросов, с некоторых пор в mysql стало невозможно пользоваться простым запросом типа like '%keyword%', но он нас полностью удовлетворял

Решили все залить в сфинкс и попробовать оптимизировать, все отлично кроме результатов, которые не совпадают с нашими ожиданиями, например:
Если искать слово "сло*", на первых местах выскакивают все ошибочные запросы где содержится именно "сло", хотя есть куча популярных слов типа "слон", "слово"
Вот наш конфиг:
source suggest
{
        type = mysql

        sql_host = ...
        sql_user = ...
        sql_pass = ...
        sql_db   = ...
        sql_port = ...

        sql_query_pre = SET NAMES utf8
        sql_query_pre = SET CHARACTER SET utf8
        sql_query_pre = SELECT @id := 0

        sql_query =  SELECT @id := @id + 1, query, total_docs, total_files, total, UNIX_TIMESTAMP(added_date) as post_date, amount FROM search_keywords where total > 0

        sql_attr_timestamp = post_date
        sql_attr_bigint = total
        sql_attr_bigint = total_docs
        sql_attr_bigint = total_files
        sql_attr_bigint = amount
        sql_field_string = query
}

index xg_suggest
{
        source = suggest
        path = /var/lib/sphinx/suggest
        docinfo = extern
        morphology = stem_enru
        min_word_len        = 2
        min_prefix_len = 2
        index_exact_words = 1
}

и настройки в php:
$sphinx->SetMatchMode (SPH_MATCH_EXTENDED);
$sphinx->SetRankingMode(SPH_RANK_BM25);
$sphinx->SetFieldWeights(array ('query' => 10));
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC, 'amount');

$query = "* ^keywor*";
$result = $sphinx->Query($query, 'xg_suggest');

То есть в поиске по "keywor*" нет результатов со словами "keyword"

Версия сфинкса sphinx-2.2.11-1
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Если искать слово "сло*", на первых местах выскакивают все ошибочные запросы где содержится именно "сло", хотя есть куча популярных слов типа "слон", "слово"

SPH_MATCH_EXTENDED2 Работает аналогично SPH_MATCH_EXTENDED с добавлением поддержки ранжирования и количественного поиска (quorum searching).
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы