2013-08-29 3 views
1

У меня есть новый индекс в новой таблице, который не возвращает никаких результатов. Это очень странно, и я никогда раньше не сталкивался с этой проблемой. Другие индексы (которые построены почти одинаково) доступны для поиска только в поисковой CLI и моем API.Поиск Sphinx не дает результатов

Вот мой конф файл

source topicalindex 
{ 
    type   = pgsql 
    sql_host  = localhost 
    sql_user  = user 
    sql_pass  = password 
    sql_db   = db 
    sql_port  = 5432 # optional, default is 3306 
    sql_query  = SELECT id, topic, reference, start_ref, end_ref, see_also_html FROM my_topicalindex 
    sql_attr_uint = topic 
    sql_attr_uint = reference 
} 


index topicalindex_index 
{ 
    source   = topicalindex 
    path   = /path/to/data/topical_index 
    docinfo   = extern 
    charset_type = utf-8 
} 

indexer 
{ 
    mem_limit  = 32M 
} 

searchd 
{ 
    listen   = 3312 
    log    = /path/to/searchd.log 
    query_log  = /path/to/query.log 
    read_timeout = 5 
    max_children = 30 
    pid_file  = /usr/local/var/searchd.pid 
    max_matches  = 30000 
    seamless_rotate = 1 
    preopen_indexes = 0 
    unlink_old  = 1 
} 

Вот отрывок доказав есть содержание в БД

[myself]:myapp(master)$ psql -d mydb -h localhost 
psql (9.2.2) 
Type "help" for help. 

esv=# SELECT * FROM my_topicalindex LIMIT 1; 
    id | topic |  reference  | start_ref | end_ref | see_also_html 
------+---------+--------------------+-----------+---------+--------------- 
2810 | Abraham | Genesis chs. 11–25 | 1011001 | 1025034 | blank 
(1 row) 

Вот процесс индексации:

$ indexer --rotate --all --config /path/to/sphinx-topical.conf 
Sphinx 0.9.9-rc2 (r1785) 
Copyright (c) 2001-2009, Andrew Aksyonoff 

using config file '/path/to/sphinx-topical.conf'... 
indexing index 'topicalindex_index'... 
collected 2809 docs, 0.1 MB 
sorted 0.0 Mhits, 100.0% done 
total 2809 docs, 75007 bytes 
total 0.067 sec, 1117456 bytes/sec, 41848.54 docs/sec 
total 3 reads, 0.000 sec, 47.0 kb/call avg, 0.0 msec/call avg 
total 7 writes, 0.000 sec, 37.0 kb/call avg, 0.0 msec/call avg 
rotating indices: succesfully sent SIGHUP to searchd (pid=79833). 

И файлы показывая, что они имеют содержание

[myself]:myapp(master)$ ll /path/to/data/ 
total 160 
drwxr-xr-x 10 myself admin 340 Aug 29 08:56 ./ 
drwxr-xr-x 3 myself admin 102 Jun 1 2012 ../ 
-rw-r--r-- 1 myself admin 33708 Aug 29 08:56 topical_index.spa 
-rw-r--r-- 1 myself admin 51538 Aug 29 08:56 topical_index.spd 
-rw-r--r-- 1 myself admin 326 Aug 29 08:56 topical_index.sph 
-rw-r--r-- 1 myself admin 15721 Aug 29 08:56 topical_index.spi 
-rw-r--r-- 1 myself admin  0 Aug 29 08:56 topical_index.spk 
-rw------- 1 myself admin  0 Aug 29 08:56 topical_index.spl 
-rw-r--r-- 1 myself admin  0 Aug 29 08:56 topical_index.spm 
-rw-r--r-- 1 myself admin 52490 Aug 29 08:56 topical_index.spp 

, а затем - мой поиск с 0 результатов

[myself]:myapp(master)$ search -i topicalindex_index -a "Abraham" 
Sphinx 0.9.9-rc2 (r1785) 
Copyright (c) 2001-2009, Andrew Aksyonoff 

using config file '/usr/local/etc/sphinx.conf'... 
index 'topicalindex_index': query 'Abraham ': returned 0 matches of 0 total in 0.000 sec 

words: 
1. 'abraham': 0 documents, 0 hits 

Почему я получаю 0 результатов при поиске "Авраам". (Как ни странно, я получаю результаты при поиске «a»)
Это проблема с моим файлом conf? Это что-то еще?

EDIT Я заметил, что при поиске «а» это только поиск против тех строк, которые действительно имеют содержание для see_also_html поля. Количество совпадений совпадает с количеством полей, которые имеют данные для каждого столбца.

ответ

1
sql_query  = SELECT id, topic, reference, start_ref, end_ref, see_also_html FROM my_topicalindex 
sql_attr_uint = topic 
sql_attr_uint = reference 

    id | topic |  reference  | start_ref | end_ref | see_also_html 
------+---------+--------------------+-----------+---------+--------------- 
2810 | Abraham | Genesis chs. 11–25 | 1011001 | 1025034 | blank 

Вы сделали topic и reference число атрибутов. (Так что они не будут включать)

Столбцы, не сделанные атрибутом (за исключением первого столбца!), Являются автоматически полями.

So start_ref, end_ref и see_also_html будут полнотекстовыми полями и поэтому доступны для поиска.

+0

Хорошее горе - спасибо вам, сэр. – yekta

0

ИЗ ТЕМЕ ОТВЕТА

Примечание: для получения дополнительной читаемости в файле вы можете заменить

sql_query  = SELECT id, topic, reference, start_ref, end_ref, see_also_html FROM my_topicalindex 

по

sql_query  = SELECT id,    \ 
         topic,   \ 
         reference,  \ 
         start_ref,  \ 
         end_ref,  \ 
         see_also_html \ 
        FROM my_topicalindex 

Просто будьте осторожны \ будет последний символ (не пробел)

Образец заявления, в котором я рад u se this notation

sql_query  =                    \ 
    SELECT  /* sphinx index article Video */            \ 
    `article`.id         AS id,          \ 
    UNIX_TIMESTAMP(`article`.fromDate)    AS ressource_date,       \ 
    unix_timestamp(now())       AS indexing_date,       \ 
    `programs`.id         AS emission_id,        \ 
    IFnull(cat.parent_id, cat.id)     AS genre_id,        \ 
    `article`.`title`        AS `title_str`,        \ 
    `article`.`title`        AS `title`,         \ 
    `article`.`feed`        AS `feed_ordinal`,       \ 
    `article`.`feed`        AS `feed`,         \ 
    `article`.`category`       AS `category`,        \ 
    `article`.`dossierId`       AS `dossierId`,        \ 
    `article`.`mainImage`       AS `mainImage`,        \ 
    group_concat(`keywords`.`translation`)   AS `tags`,         \ 
    group_concat(o.id)        AS `video_id_list`,       \ 
    concat(' summary:',                   \ 
      `article`.summary,                 \ 
      ' synopsis',                  \ 
      `article`.synopsis,                 \ 
      ' Summary Title :',                 \ 
      `article`.summaryTitle,                \ 
      ' Url',                    \ 
      `article`.title_url,                \ 
      ' Main',                   \ 
      `article`.mainParagraph)    AS content,         \ 
    concat(' Signature:',                  \ 
      `article`.signature)     AS subcontent,        \ 
    UNIX_TIMESTAMP(article.fromDate)    AS online_from_date,      \ 
    if (UNIX_TIMESTAMP(article.toDate)<2000000000,            \ 
     UNIX_TIMESTAMP(article.toDate),              \ 
     2000000000)        AS online_to_date       \ 
FROM                       \ 
    `article`.`article`                   \ 
LEFT JOIN                      \ 
    `media`.`programs`                   \ 
ON                        \ 
    `article`.`category` = `programs`.`articleReferenceCategory`        \ 
LEFT JOIN                      \ 
    `media`.`category` AS cat                 \ 
ON `programs`.mainCategoryId = cat.id               \ 
LEFT JOIN                      \ 
    article.article_keyword       AS ak          \ 
ON                        \ 
    ak.articleId = article.id                 \ 
LEFT JOIN                      \ 
    article.keyword         AS keywords         \ 
ON                        \ 
    ak.keywordId = keywords.id                 \ 
AND `keywords`.`visible` = 1                 \ 
AND `keywords`.`translation` !=''                \ 
LEFT JOIN                      \ 
     article.embed           AS ae       \ 
ON                        \ 
    ae.articleId = article.id                 \ 
INNER JOIN                      \ 
    media.`objects`          AS o         \ 
ON                        \ 
    o.id = SUBSTRING_INDEX(SUBSTRING(ae.code, 5+LOCATE('rel="',ae.code)), '"', 1)    \ 
    AND o.type='video'                   \ 
    AND o.status='complete'                 \ 
     AND o.active=1                   \ 
     AND (o.part_type IS NULL OR o.part_type = 'extract')          \ 
     AND o.wildcard not like 'www.%.be/presse%'            \ 
                           \ 
WHERE                       \ 
    `article`.`validated` = 1                 \ 
AND `article`.`published` = 1                 \ 
AND `article`.`deleted` = 0                  \ 
AND `article`.`displayDate` < Now()                \ 
AND `article`.`fromDate` < Now()                \ 
AND `article`.`toDate` > Now()                 \ 
AND `article`.id >= $start                  \ 
AND `article`.id < $end                   \ 
GROUP BY `article`.id 
+1

Исправление: для облегчения чтения вы можете его заменить. Все лишние пробелы и посторонние косые черты просто путают дело и затрудняют чтение. ИМХО, конечно! ; p – barryhunter

+0

О, вам это не нравится! Просто, например, я дам заявление, которое я не могу прочитать на «одной строке», возможно, вы видите улучшение :-) – Moosh

+0

То просто это, его субъективное. Как и любой инструмент, его можно использовать навсегда, но его можно также злоупотреблять. Theres загружает вещи, которые можно было бы сделать с этим запросом, который бы оптимизировал его для sphinx, но и сделать его более читаемым. Но, как вы говорите, это не по теме. – barryhunter

Смежные вопросы