Задать вопрос
@kucheriavij

Почему sphinx не ищет если фраза состоит из более 2 слов?

Используется расширение https://github.com/yiisoft/yii2-sphinx.
Конфиг sphinx:
source gg : site1
{
    sql_query = SELECT id, title, name, address, phone FROM gg__restaurants
    sql_attr_uint = id
    sql_field_string = title
    sql_field_string = name
    sql_field_string = address
    sql_field_string = phone
}

index siteSearch
{
    source = gg
    path = /var/www/verygood/data/www/gurman-gid.very-good.ru/sphinx/data/siteSearch
    docinfo = extern
    dict = keywords
    mlock = 0
    morphology = stem_enru
    expand_keywords = 1
    min_stemming_len = 1
    min_word_len = 3
    html_strip = 1
    preopen = 1
    min_infix_len = 1
    #min_prefix_len = 3
    index_exact_words = 1
}


Ищу так:
$query = new yii\sphinx\Query();
        //$query->select('id, title');
        $query->from('siteSearch');
        $query->showMeta(true);
        $query->match($this->sphinxMatchString($searchString));

        $provider = new yii\sphinx\ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10,
            ]
        ]);


Функция sphinxMatchString:
private function sphinxMatchString($query = [])
    {
        $matchString = [];

        foreach ($query as $item) {
            $exploded = explode(' ', $item);
            foreach ($exploded as $value) {
                $matchString[] = $value;
            }
        }

        return '("' . implode('" | "', $matchString) . '")';
    }


В результате если используется поисковая строка из одного или двух слов, то все работает. В противном случае ничего не находит. Подскажите в какую сторону копать? уже весь день сижу с этой проблемой, никак не могу понять что к чему
  • Вопрос задан
  • 567 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
opium
@opium
Просто люблю качественно работать
посмотрите квери лог сфинкса и все станет ясно
Ответ написан
Комментировать
@kucheriavij Автор вопроса
Разобрался.
Сделал так, и все заработало
$query->match(new Expression(':match', [
            'match' => $this->sphinxMatchString($searchString),
        ]));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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