Выполнение поиска в категории Sphinx php

185
04 октября 2017, 10:08

Доброе время суток!

Есть такой конфиг Sphinx

    source txtcontent :  ru_config
{ 
  sql_query = SELECT `id` as `txt_id`, 1 as index_id, `type_id`,`content_type_id`, `title`, `annonce`, `content` FROM `TxtContent` WHERE `status` = 1 AND `content_type_id` != 14
  sql_attr_uint   = index_id
  sql_attr_uint   = type_id
}

Вся таблица индексируется, и хранится в одном большом поисковом индексе. Когда речь идет о том что бы найти что то в ней то все работает ОК

Но сегодня встала задача выполнить поиск по категории. Категории описаны в поле type_id и имеют тип int.

Как в php через SphinxAPI выполнить такой поиск?

Стандартный поиск выглядит вот так.

$sphinxClient = new SphinxClient();
$sphinxClient->SetServer("127.0.0.1", 3312 );
$sphinxClient->SetLimits( 0, 700,700 );
$sphinxClient->SetSortMode(SPH_SORT_RELEVANCE);
$sphinxClient->SetArrayResult( true );
$result = $sphinxClient->Query( $this->query, 'txtcontent provider item');

Я пробовал добавлять $sphinxClient->SetFilter('type_id','1'); чтобы выполнить поиск только там, где type_id = 1, но это не помогло.

Собственно: как мне выполнить поиск по конкретной категории? Вариант найти все и на php выкинуть из результата лишние не рассматривается, (иначе поиск тогда будет затератся существующим лимитом) как это сделать "правильно" через API, не помещая каждую тему в отдельный поисковый индекс?

Answer 1

Короче сам решил свою проблему, трабла была в том что В поисковых индексах provider item не были проиндексированы с type_id в то время как txtcontent был, надо добавить type_id для других индексов и тогда фильтрация пройдет нормально.

READ ALSO
Как провести слияние двух строк в PHP

Как провести слияние двух строк в PHP

Прошу помощи решить данную проблему

185
$wp_filesystem return null

$wp_filesystem return null

Глобальная переменная $wp_filesystem в WordPress возвращает nullВ чем может быть проблема?

160
Почему этот код выведет тройку?

Почему этот код выведет тройку?

Уважаемые коллеги! В одном соревновании столкнулся с таким кодом:

230
Как вызвать метод класа через итератор?

Как вызвать метод класа через итератор?

У меня есть контейнер, типом которого есть мой клас A, контейнер, к примеру, set< class A>Я создаю итератор set::iterator iter = set< class A >

235