|
Sphinx
Community
Services
Misc
Subscribe in a reader
|
Поиск по стандартному форуму
Russian forum |
1 | 2 | 3 | 4 | 5 | ... |
32 | 33 | 34 | 35 | next »» | Create new thread
|
kaibox
Name: Andrey Posts: 9 |
2010-06-09 12:51:27
| reply!
Никак не могу понять, как сделать source для индексирования по стандартному форуму,
который предельно упрощенно представлен двумя таблицами:
-- Таблица тем
create table boards (
id int unsigned not null PRIMARY KEY auto_increment,
subforum int,
name varchar(50),
title varchar(100),
body varchar(3000)
);
-- Таблица ответов (постов) в теме
create table posts (
id int unsigned not null PRIMARY KEY auto_increment,
ref int, -- ссылается на id темы
name varchar(50),
body varchar(3000)
);
Я не могу понять, как склеить одновременный поиск по таблице тем форума
и по таблице постов в каждой теме. Поиск будет в boards.title, boards.body и в posts.body.
Если я объединяю две таблицы в одном запросе через JOIN, то в качестве уникального
документа для индексации будет выступать posts, а не boards. Данные из boards просто
многократно продублируются для каждого поста.
select boards.id, boards.title, boards.body, posts.body from boards,posts where
boards.id=posts.ref;
А раз дублируются, то нарушается уникальность id для boards, т.к. постов в теме много и
для каждого поста будет уже неуникальный id темы (boards.id будет употреблен один и тот
же для постов одной темы), да и индекс растет из-за дублей (title темы и ее body будут в
каждом посте), следовательно файл индекса растет, скорость поиска падает - нехорошие
моменты. Вроде бы тут все можно сделать, но как результат поиска мне нужен id темы, а не
отдельного поста. А он не уникальный. Тут тупик.
Если делать два source и два индекса, то не могу понять, как склеить выходные данные,
чтобы получить id тем. Допустим я получу из первого source: id,title - это то, что мне
нужно для вывода. Но как быть со вторым source? Там я получаю ref, которые и есть
boards.id, но title там нет. Делать отдельные запросы к базе, чтобы получить недостающие
title?
И потом, как еще совместить найденные id из boards и ref из posts? Т.е. мне нужно еще в
PHP прогонять id и ref, чтобы убрать дубли и отсортировать их? Про релевантность вообще
молчу пока...
Может как-то проще все решается?
|
 |
|
kaibox
Name: Andrey Posts: 9 |
to: kaibox, 2010-06-10 13:52:45
| reply!
Если все-таки разделять поиск на две части (отдельно по темам и по постам), то совершенно
неясно, как искать по постам, если нужно отфильтровать по subforum, т.е. искать только по
какому-то подфоруму. В самих "постах" нет такой информации.
|
 |
|
kaibox
Name: Andrey Posts: 9 |
to: kaibox, 2010-06-17 09:34:15
| reply!
Форум, я понял, с 2009 года уже не поддерживается автором изобретения. Жаль.
Худо-бедно я нашел решение с представлением source для форума - просто объединил таблицы
и потом сгруппировал результат по номеру тем. Это работает.
Хочу сказать о другом. Если искать с использованием расширенного поиска и использовать
близость слов помощью тильды (~10), например:
'@(title,body) "слова запроса"~10'
то все работает, но (!) есть запросы, на которых поиск ложится с ошибкой Segmentation
Fault. Вот случайно напоролся на один такой запрос из двух слов (достаточно
распространенных для нашего форума), ничем особо не отличающийся от остальных. Если я
уменьшаю proximity до ~8, то все работает. Но ведь это частный случай. Вот пока до 8-ми
уменьшил, crash-запросов больше не встречал. Посмотрим, может пользователи нашего сайта
будут жаловаться еще.
Но это баг. Версия Sphinx последняя на данный момент (ставили неделю назад). Система
Linux Fedora 64-х разрядная.
Я посмотрел по форуму - есть такая проблема. Надеюсь, Андрей все-таки найдет время для
доводки движка.
|
 |
|
kaibox
Name: Andrey Posts: 9 |
to: kaibox, 2010-06-17 09:42:38
| reply!
crash-запрос сам нашел. Просто поменял два слова запроса местами :)))) И смех, и слезы...
На запросе "слово1 слово2" глючит с ~10, а если слова местами поменять, то и с ~8 глючит.
На других словах все великолепно работает.
|
|
kaibox
Name: Andrey Posts: 9 |
to: kaibox, 2010-06-17 09:58:47
| reply!
Решение: убрал нафиг поиск с proximity. Оставил просто поисковую фразу без кавычек.
|
|
shodan
Name: Andrew Aksyonoff Posts: 4275 |
to: kaibox, 2010-06-23 19:08:30
| reply!
> есть запросы, на которых поиск ложится с ошибкой Segmentation Fault.
Заслайте данные для воспроизведения - по мере сил будем чинить.
Баги, которые нельзя воспроизвести - чинить не умеем :(
|
|
shodan
Name: Andrew Aksyonoff Posts: 4275 |
to: kaibox, 2010-06-23 19:09:57
| reply!
> Форум, я понял, с 2009 года уже не поддерживается автором изобретения. Жаль.
Форум прочитывается по мере наличия времени.
Вот, начало появляться.
|
|
kaibox
Name: Andrey Posts: 9 |
to: shodan, 2010-07-30 08:09:50
| reply!
Мне важно все-таки использовать поиск с расстояниями между словами, поэтому я готов
поучаствовать в доводке софта. Что от меня требуется?
|
|
shodan
Name: Andrew Aksyonoff Posts: 4275 |
to: kaibox, 2010-08-04 20:26:05
| reply!
> Мне важно все-таки использовать поиск с расстояниями между словами, поэтому я готов
> поучаствовать в доводке софта. Что от меня требуется?
Все необходимые данные для воспроизведения проблемы у нас, как минимум.
Минимальные конфиг, SQL дамп, итп.
|
|
kaibox
Name: Andrey Posts: 9 |
to: shodan, 2010-08-05 14:12:44
| reply!
> Минимальные конфиг, SQL дамп, итп.
Куда высылать?
|
|
shodan
Name: Andrew Aksyonoff Posts: 4275 |
to: kaibox, 2010-08-05 14:58:10
| reply!
> > Минимальные конфиг, SQL дамп, итп.
>
> Куда высылать?
shodan@ в известном домене, например.
|
|
kaibox
Name: Andrey Posts: 9 |
to: shodan, 2010-08-11 07:34:43
| reply!
Выслал 8 августа на почту. Сообщите, пожалуйста, когда получите информацию.
|
|
kaibox
Name: Andrey Posts: 9 |
to: kaibox, 2010-08-31 09:54:29
| reply!
Уважаемый Андрей,
Вы просили меня сформировать и выслать необходимую информацию для отладки вашего поиска.
Я ее выслал и просил уведомить о получении. От Вас до сих пор никакой реакции.
Подожду еще недельку, после которой подобное "взаимодействие" буду считать законченным.
|
Russian forum |
1 | 2 | 3 | 4 | 5 | ... |
32 | 33 | 34 | 35 | next »» | Create new thread
|