2016-05-22 5 views
0

Я смущен насчет Sphinx. Я говорю о проблеме.
конфигурации Моя система:Почему Sphinxapi не возвращает результат?

  • Ubuntu 16.04 LTS
  • Apache 2.4.18
  • PHP 5.6.21
  • MariaDB 10.1.14
  • sphinx 2.2.10

Моя база данных test2 и содержит 2 таблицы (документы и пользователей) и 1 просмотр (поиск).

  • документы (таблица):

    • идентификатор
    • имя
  • пользователей (таблица):

    • ID
    • fname
    • lname
    • электронной
  • поиск (просмотр):

    • sphinxid
    • itemid
    • данные
    • datatype

вид Поисковый запрос

CREATE АЛГОРИТМ = Неопределенные DEFINER = root @localhost SQL DEFINER БЕЗОПАСНОСТИ VIEW search AS ВЫБРАТЬ UUID_SHORT() AS sphinxid, users. id А.С. itemid, CONCAT_WS (»», users. fname, users. lname, users. email) А.С. data, 1 КАК datatype ОТ users UNION SELECT, UUID_SHORT (AS) sphinxid, documents. id AS itemid, documents.name AS data, 2 AS datatype ОТ documents

файла конфигурации Sphinx:

source my_search 
{ 
     type     = mysql 

     sql_host    = localhost 
     sql_user    = root 
     sql_pass    = myPass 
     sql_db     = test2 
     sql_port    = 3306 # optional, default is 3306 

     sql_query    = \ 
       SELECT sphinxid,itemid, data, datatype \ 
       FROM test2.search; 


     sql_attr_uint   = itemid 
     sql_attr_uint   = data 
} 

index test1 
{ 
     source     = my_search 
     path     = /var/lib/sphinxsearch/data/test1 
     morphology    = stem_en 

     min_word_len   = 3 
     # min_prefix_len   = 0 
     # enable_star    = 0 
} 

searchd 
{ 
     listen     = 9312 
     listen     = 9306:mysql41 
     log      = /var/log/sphinxsearch/searchd.log 
     query_log    = /var/log/sphinxsearch/query.log 
     read_timeout   = 5 
     max_children   = 30 
     pid_file    = /var/run/sphinxsearch/searchd.pid 
     # max_matches    = 1000 
     seamless_rotate   = 1 
     preopen_indexes   = 1 
     unlink_old    = 1 
     workers     = threads # for RT to work 
     binlog_path    = /var/lib/sphinxsearch 
} 

Я использовал эту команду, чтобы сделать индекс indexer --config /etc/sphinxsearch/sphinx.conf --all --rotate. И результат:

Sphinx 2.2.10-id64-release (2c212e0) 
Copyright (c) 2001-2015, Andrew Aksyonoff 
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com) 

using config file '/etc/sphinxsearch/sphinx.conf'... 
indexing index 'test1'... 
collected 200 docs, 0.0 MB 
total 200 docs, 200 bytes 
total 0.007 sec, 28417 bytes/sec, 28417.16 docs/sec 
total 2 reads, 0.000 sec, 1.5 kb/call avg, 0.0 msec/call avg 
total 10 writes, 0.000 sec, 0.6 kb/call avg, 0.0 msec/call avg 
rotating indices: successfully sent SIGHUP to searchd (pid=2287). 

Я использовал sphinxapi.php как клиент api и мой php тестовый файл:

<?php 

include '../sphinxapi.php'; 

if(!empty($_GET['q'])){ 
    var_dump($_GET['q']); 
    // Build search query 
    $cl = new SphinxClient(); 
    $cl->SetServer("localhost", 9312); 
    $cl->SetMatchMode(SPH_MATCH_EXTENDED ); 
    $cl->SetRankingMode (SPH_RANK_SPH04); 
    // Execute the query 
    $q = '"' . $cl->EscapeString($_GET['q']) . '"/1'; 
    $searchresults = $cl->Query($q ,'test1'); 
    var_dump($cl->GetLastError()); 
    var_dump($cl->GetLastWarning()); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Sphinx test 1</title> 
</head> 

    <body> 
     <form name="search" method="get" action=""> 
      <input type="text" name="q" id="q" /> 
      <input type="submit" value="GO" class="form-submit" /> 
     </form> 
     <p> 
      <pre> 
       <?php 
       if(!empty($searchresults)){ 
        print_r($searchresults); 
       } 
       ?> 
      </pre> 
     </p> 
    </body> 

</html> 

Я смотрю на search view и я выбираю одно поле (Scarlett [email protected]), но когда я искать его (что-то вроде «Scarlet»), я не получаю никакого результата:

Array 
(
    [error] => 
    [warning] => 
    [status] => 0 
    [fields] => Array 
     (
      [0] => datatype 
     ) 

    [attrs] => Array 
     (
      [itemid] => 1 
      [data] => 1 
     ) 

    [total] => 0 
    [total_found] => 0 
    [time] => 0.000 
    [words] => Array 
     (
     [scarlet] => Array 
      (
       [docs] => 0 
       [hits] => 0 
      ) 

    ) 
) 

Действительно, я не знаю, почему это Ретур ns ничего?


Я использую эту команду mysql -h0 -P9306 согласно сфинкса tutorial.you можно увидеть на картинке, что у меня нет каких-либо данных (вы можете увидеть мой запрос в sphinx.conf) и возвращает 20 строк! (Таблица пользователей имеет 100 строк и документов имеют 90 строк). <code>mysql -h0 -P9306</code> result

Я использую этот учебник Integrating Sphinx Search into a PHP Application, но я не могу получить результат в моем приложении! :(


Когда я использую по умолчанию sphinx.conf и его тестовую базу данных, мое приложение works.I думаю, мой sphinx.conf неправильно или, возможно, это вызвано мой взгляд (поиск)!

ответ

1

Глядя на ваш запрос

SELECT sphinxid,itemid, data, datatype \ 
      FROM test2.search; 

Принимая каждый в свою очередь

  • sphinxid -> автоматически document_id (первый столбец)
  • Itemid -> сделан в uint attribute (из-за sql_attr_uint)
  • данных -> сделан в uint attribute (из-за sql_attr_uint)
  • типа данных - не упоминается, так что текст field.

Но, ваше мнение

... CONCAT_WS(' ', users.fname, users.lname, users.email) AS data, 
1 AS datatype ... 

Так выглядит ваш фактический текст в «данных», который затем хранится в атрибуте целого. Не собираюсь работать!

Предлагает

sql_attr_uint   = data 

опечатка и должно быть

sql_attr_uint   = datatype 

вместо этого? (данные будут индексироваться как текстовое поле!)

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

  • Нет связанных вопросов^_^