Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 24 Май, 2012, 07:11:29

Страниц: [1]
Печать
Автор Тема: Sphinx. Узнать в каком индексе найдено?  (Прочитано 1348 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexB    ↓ 
17 Июль, 2009, 01:47:32
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6

Если я делаю поисковый запрос по нескольким индексам, типа
$sphinx->Query($phrase, '*')
 
то имею результат типа:
Text

   [matches] => Array
        (
            [236644] => Array
                (
                    [weight] => 5
                    [attrs] => Array
                        (
                            [dt_ts] => 1247774400
                            [title] => 100
                        )
                )
...
 

Это, конечно, прелесно. Но как узнать 236644 это id новости или скажем статьи, которые в разных таблицах БД и соответственно в разных индексах?
 
Пока лишь пришло в голову в каждую индексируемую таблицу добавить поле и тупо прописать ему константное значение для всех записей. Тогда смогу получить инфу из attrs. Но это же кривь ...
 
Записан

adw0rd    ↓ 
17 Июль, 2009, 01:51:59 , спустя 4 минуты 27 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

AlexB, да, добавлять в индекс `row_type` (и числовые индексы например... 1,2,3,4)
Спустя 1 минуту 29 секунд добавил
Text

        sql_query_pre = SET NAMES utf8
        sql_query_pre = SET CHARACTER SET utf8
 
        sql_query = \
        select (`n`.`id` * 10) + 1 as `id`, `n`.`title` as `title`, `ns`.`text` as `text`, `created_on` as `created`, 1 as `row_type` \
          from `news_source` as `ns` \
          left join `news` as `n` on `n`.`id` = `ns`.`news_id` \
          where `n`.`active` = 1 and `n`.`uri` != '' and `n`.`title` != '' \
          order by `n`.`id` desc;
        #  limit 1000;
 
        sql_attr_uint = row_type
        sql_attr_timestamp = created
 
        sql_query_info = SELECT * FROM `news` WHERE `id` = ($id - 1) / 10
 
 
Спустя 1 минуту 7 секунд добавил
AlexB, кстати, рекомендую юзать SphinxSE, либо ShinxQL
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
17 Июль, 2009, 02:02:43 , спустя 10 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6

А ну да, прям в индекс
Select 1 as News, Id, Date ...
Select 2 as Artice, Id, Date ...
Туплю, в общем, просто сфинкс не я ставил, я только извлекаю, надо пнуть админа чтоб сделал
Спустя 1 минуту 48 секунд добавил
Пока ты мне код добавлял, до меня самого доперло ....
Спасибо, а то чего-то заклинило ...
Записан

adw0rd    ↓ 
17 Июль, 2009, 02:03:34 , спустя 51 секунду
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

Select 1 as News, Id, Date ...
Select 2 as Artice, Id, Date ...

первым должен идти ид, обязательно, а не "1 as News"
вот еще почитай http://adw0rd.ru/2009/sphinxsearch/
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
17 Июль, 2009, 02:07:17 , спустя 3 минуты 43 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6


первым должен идти ид, обязательно, а не "1 as News"
Спасибо, учтем.
 

вот еще почитай http://adw0rd.ru/2009/sphinxsearch/
Да я читал.
Кстати еще вопрос. Чтоб сделать отображение контекста в котором найдено слово, есть какие-нибудь готовые решения?
Sphinx в отличие от некоторых других поисковиков такой инфы не хранит, я верно это понял?
Записан

adw0rd    ↓ 
17 Июль, 2009, 02:07:56 , спустя 39 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

Кстати еще вопрос. Чтоб сделать отображение контекста в котором найдено слово есть какие-нибудь готовые решения?
Sphinx в отличие от некоторых других поисковиков такой инфы не хранит, я верно это понял?
есть такая возможность в Sphinx, только я ей не пользовался и не помню названия, но точно есть!
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
17 Июль, 2009, 02:10:37 , спустя 2 минуты 41 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6

Че-то мы не нашли.
Он вообще только числа выплевывает ... никакой текстовой информации.
Можно, конечно, самим попытаться соорудить, но во первых надо анализировать строку запроса, во вторых лишний раз дергать базу ... в общем, не гуд
Записан

phpdude    ↓ 
17 Июль, 2009, 02:13:15 , спустя 2 минуты 38 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

adw0rd, ржака :)
Спустя 39 секунд добавил
PHP
        $strings = array_map(create_function('$a','return $a["short"];'),$items);
        $snippets = $sphinx->BuildExcerpts($strings,"motangonews",$term,array("limit"=>SNIPPET_LEN,"before_match"=>"<strong>","after_match"=>"</strong>"));
 

вот так делается это
Спустя 26 секунд добавил
массив строк в которых замены произвести + кейворды, остальное доп инфа
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
adw0rd    ↓ 
17 Июль, 2009, 02:19:39 , спустя 6 минут 24 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

AlexB, он только хранит иды, все верно, текст он юзает для поиска... но не для результата, поэтому я тебе рекомендую юзать SphinxSE и жойнить выдачу.
 
вот еще почитай http://habrahabr.ru/blogs/sphinx/
Спустя 2 минуты 2 секунды добавил
Нашел по запросу "highlight"
 
5.7.1. BuildExcerpts
 
Prototype: function BuildExcerpts ( $docs, $index, $words, $opts=array() )
 
Excerpts (snippets) builder function. Connects to searchd, asks it to generate excerpts (snippets) from given documents, and returns the results.
 
$docs is a plain array of strings that carry the documents' contents. $index is an index name string. Different settings (such as charset, morphology, wordforms) from given index will be used. $words is a string that contains the keywords to highlight. They will be processed with respect to index settings. For instance, if English stemming is enabled in the index, "shoes" will be highlighted even if keyword is "shoe". $opts is a hash which contains additional optional highlighting parameters:
 
"before_match":
    A string to insert before a keyword match. Default is "<b>".
"after_match":
    A string to insert after a keyword match. Default is "<b>".
"chunk_separator":
    A string to insert between snippet chunks (passages). Default is " ... ".
"limit":
    Maximum snippet size, in symbols (codepoints). Integer, default is 256.
"around":
    How much words to pick around each matching keywords block. Integer, default is 5.
"exact_phrase":
    Whether to highlight exact query phrase matches only instead of individual keywords. Boolean, default is false.
"single_passage":
    Whether to extract single best passage only. Boolean, default is false.
"weight_order":
    Whether to sort the extracted passages in order of relevance (decreasing weight), or in order of appearance in the document (increasing position). Boolean, default is false.
 
Returns false on failure. Returns a plain array of strings with excerpts (snippets) on success.

http://www.sphinxsearch.com/docs/manual-0.9.8.html#api-func-buildexcerpts
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
17 Июль, 2009, 07:41:39 , спустя 5 часов 22 минуты
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6

О, пасиб вам
Да BuildExcerpts видимо пойдет, и как я ее проебал ... ))))))))))))
 
Две недели работаем без передыху, уже крыша едет, а раньше сфинкс не юзал ...
Спустя 5 часов 18 минут 19 секунд добавил
В общем, прикрутил
http://www.sport-express.ru/search/?phrase=%F1%EF%E0%F0%F2%E0%EA&searchzone=news&from=1996-01-01&to=2009-07-17
Записан

Страниц: [1]
Печать
 

Перейти в: