📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 08/09/16 в 10:57 |
Как в базе десков организовать поиск с группировками типа
- только straight
- только для геев
- только shemale
Поиск для бОльших результатов и меньшей релевантности организован как SPH_MATCH_ANY, но надо сделать на поисковой форме переключатель в виде радиокнопки, который будет фильтровать результаты по гееям и не геям и т.п.
Т.е. в поиск надо будет встроить отрицания, типа для straight ко всем запросам добавив: {запрос} -gay -twink
Или наоборот, как-то придать для поиска по геям и шмелям обязательный весомый кейворд, коорый будет добавляться к запросу..
Тут возникает загвоздка, все эти прелесьти поиска не работают в SPH_MATCH_ANY. Так же в документации не рекомендуется злоупотреблять отрицанием, так как оно, вроде, сильно грузит поиск, если основной запрос короткий.
Есть идеи?
|
|
|
|
С нами с 14.11.05
Сообщения: 56
Рейтинг: 177
|
Добавлено: 08/09/16 в 12:20 |
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 08/09/16 в 12:53 |
lalex писал: | Используй атрибуты. |
Не совсем ясно, что может являться атрибутом и каковы критерия совпадения атрибута с массивом фильтра.
У меня поиск ведётся по тайтлам, которые являются sql_field_string в sphinx, отдельного атрибута\столбца, который разделял бы весь контент на теги\группы нет.
Т.е. надо как-то фильтровать по тому же полю или одному из полей, в котором(ых) и ведётся текстовый поиск.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 09/09/16 в 00:39 |
3 индекса
загонять в нужный индекс через title like '%gay%'
либо пометить записи тегом-категорией
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 09/09/16 в 11:48 |
Sterx писал: | 3 индекса
загонять в нужный индекс через title like '%gay%' |
Можно чуть больше инфы?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7614
Рейтинг: 5760
|
Добавлено: 09/09/16 в 12:33 |
ну смотри вот мой конфиг с использованием поля orientation
Код: [развернуть] |
source cjnet_search_straight
{
type = mysql
sql_host = xxxxx
sql_user = cjnet_search
sql_pass = xxxxx
sql_db = cjnet_search
sql_port = 3306 # optional, default is 3306
sql_query = SELECT contentID, title, description, niches, tubeTitle, data, duration FROM content WHERE status = 'active' AND orientation = 'straight'
sql_attr_uint = data
sql_attr_uint = duration
}
index cjnet_search_index_straight
{
source = cjnet_search_straight
path = /var/sphinx/cjnet_search_index_straight
docinfo = extern
morphology = stem_en # or stem_ru for example
}
source cjnet_search_gay
{
type = mysql
sql_host = чччччч
sql_user = cjnet_search
sql_pass = xxxxxxxxxx
sql_db = cjnet_search
sql_port = 3306 # optional, default is 3306
sql_query = SELECT contentID, title, description, niches, tubeTitle, data, duration FROM content WHERE status = 'active' AND orientation = 'gay'
sql_attr_uint = data
sql_attr_uint = duration
}
index cjnet_search_index_gay
{
source = cjnet_search_gay
path = /var/sphinx/cjnet_search_index_gay
docinfo = extern
morphology = stem_en # or stem_ru for example
}
source cjnet_search_shemale
{
type = mysql
sql_host = xxxxx
sql_user = cjnet_search
sql_pass = xxxxx
sql_db = cjnet_search
sql_port = 3306 # optional, default is 3306
sql_query = SELECT contentID, title, description, niches, tubeTitle, data, duration FROM content WHERE status = 'active' AND orientation = 'shemale'
sql_attr_uint = data
sql_attr_uint = duration
}
index cjnet_search_index_shemale
{
source = cjnet_search_shemale
path = /var/sphinx/cjnet_search_index_shemale
docinfo = extern
morphology = stem_en # or stem_ru for example
}
|
поскольку флага orientation у тебя нет, его нужно либо создать (перебрав записи на наличие в title соответствующих кеев - те что не подойдут ни под gay ни под shemale идут автоматом как straight (например дефолтное значение orientation))
или
для помещения в нужный индекс сфинкса переделать запросы его конфига используя в выборках встроенные механизмы типа like или FULLTEXT search
вместо допоустим запроса в шмелином индексе
SELECT contentID, title, description, niches, tubeTitle, data, duration FROM content WHERE status = 'active' AND orientation = 'shemale'
использовать запрос
SELECT contentID, title, description, niches, tubeTitle, data, duration FROM content WHERE status = 'active' AND (title LIKE '%shemale%' OR title LIKE '%ladyboy%'
надо понимать что пиздец как неприятно мускулю, полнотекстовый не буду приводить - их в сети шквал примеров.
я бы все таки прописал признак orientation на твоем месте
и использование
Код: [развернуть] |
$this->sphinxIndexName = 'cjnet_search_index';
if($this->routeValues->orientation != 'all'){$this->sphinxIndexName .= '_' . $this->routeValues->orientation;}
|
Код: [развернуть] |
$sphinx = new SphinxClient();
$sphinx->SetServer(SPHINX_IP, SPHINX_PORT);
$sphinx->SetMatchMode(SPH_MATCH_ANY);
switch($this->routeValues->order){
case 'data':
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC,'data');
break;
case 'duration':
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC,'duration');
break;
default:
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
break;
}
if($this->redis->exists(NICHE . $this->sphinxQuery)){
$sphinx->SetFieldWeights(array ('niches' => 20, 'title' => 10));
}elseif($this->redis->exists(TUBE . $this->sphinxQuery)){
$sphinx->SetFieldWeights(array ('tubeTitle' => 20, 'title' => 10));
}else{
$sphinx->SetFieldWeights(array ('niches' => 10, 'title' => 20));
}
$limit = $this->settings->searchMoviesPerPage;
$offset = (($this->routeValues->page * $this->settings->searchMoviesPerPage) - $this->settings->searchMoviesPerPage);
$sphinx->SetLimits($offset,$limit,($offset+$limit));
$resultSphinx = $sphinx->Query($this->sphinxQuery, $this->sphinxIndexName);
|
как то так
или 1 индекс с атрибутами как выше писали
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|