ФорумРазработкаБазы данных → Sphinx. Узнать в каком индексе найдено?

Sphinx. Узнать в каком индексе найдено?

  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 5:47

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

    то имею результат типа:

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



    Это, конечно, прелесно. Но как узнать 236644 это id новости или скажем статьи, которые в разных таблицах БД и соответственно в разных индексах?

    Пока лишь пришло в голову в каждую индексируемую таблицу добавить поле и тупо прописать ему константное значение для всех записей. Тогда смогу получить инфу из attrs. Но это же кривь …

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 5:51, спустя 4 минуты 27 секунд

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

    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

    Спустя 67 сек.
    AlexB, кстати, рекомендую юзать SphinxSE, либо ShinxQL
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:02, спустя 10 минут 44 секунды

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

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:03, спустя 51 секунду

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


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

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:07, спустя 3 минуты 43 секунды


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


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

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:07, спустя 39 секунд

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

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:10, спустя 2 минуты 41 секунду

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

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:13, спустя 2 минуты 38 секунд

    adw0rd, ржака :)
    Спустя 39 сек.
    		$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 сек.
    массив строк в которых замены произвести + кейворды, остальное доп инфа
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 6:19, спустя 6 минут 24 секунды

    AlexB, он только хранит иды, все верно, текст он юзает для поиска… но не для результата, поэтому я тебе рекомендую юзать SphinxSE и жойнить выдачу.

    вот еще почитай http://habrahabr.ru/blogs/sphinx/
    Спустя 122 сек.
    Нашел по запросу "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
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 июля 2009 г. 11:41, спустя 5 часов 22 минуты

    О, пасиб вам
    Да BuildExcerpts видимо пойдет, и как я ее проебал … ))))))))))))

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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!