2012-10-24 59 views
3

我已經問了一些類似的問題,但可能沒有提供所有需要的信息。使用帶有多個索引的PHP的獅身人面像

我已經安裝了最新版本的獅身人面像的 - 並且已經創建的索引(雖然我不是100%我已經優化了此配置)(見底部的鏈接引擎收錄了該配置)

以下是連接到Sphinx API的字符串'教學',我想執行搜索的腳本 - 目前我有四個索引(請參閱配置 - http://pastebin.com/DGgheqYm)我需要能夠確定哪個索引每個結果來自於,因爲這將決定我需要執行查詢的哪個表格

例如..

// {$table}/{$pk} would vary depending on which index we are using (eg if articles index - then it would use the table called 'articles' 
$IDs = implode(",",array_keys($result["matches"])); 
$sql = "SELECT * FROM {$table} WHERE {$pk} IN ($IDs) ORDER BY FIELD(`id`,$IDs)" 

隨着ID數組返回任何人都可以建議最好的辦法: -

  • 確定的結果是來自於確定查詢

  • And..if我該指數一個小白位與Spinx :)

    <?php 
    include('api/sphinxapi.php'); 
    $cl = new SphinxClient(); 
    $cl->SetServer("localhost", 9312); 
    $cl->SetMatchMode(SPH_MATCH_ANY ); 
    $result = $cl->Query("teaching"); 
    
    if ($result === false) { 
    echo "Query failed: " . $cl->GetLastError() . ".\n"; 
    } 
    else { 
    if ($cl->GetLastWarning()) { 
        echo "WARNING: " . $cl->GetLastWarning() . " 
    "; 
    } 
    
    if (! empty($result["matches"])) { 
        foreach ($result["matches"] as $doc => $docinfo) { 
         echo "$doc\n"; 
        } 
    
        print_r($result); 
    } 
    } 
    
    exit; 
    ?> 
    

- 我這樣做的 '正確的方式' http://pastebin.com/DGgheqYm

UPDATE:仍然有問題,這裏從獅身人面像API輸出 - 我不明白爲什麼,我已經使用來自巴里的帖子幫助我增加屬性似乎不是不出現 http://pastebin.com/jzBexCBq

回答

5

每個索引設置一個 '恆' 屬性....

source articles 
... 
sql_query = SELECT ID, 1 AS table_id, Title, Description FROM articles 
sql_attr_uint = table_id 
... 

source publications 
... 
sql_query = SELECT Title_ID, 2 AS table_id, Title, PageTitle, PageContent, Description FROM publications 
sql_attr_uint = table_id 
... 

//etc 

然後

foreach ($result["matches"] as $doc => $docinfo) { 
    switch($docinfo['attrs']['table_id']) { 
     case 1: echo "Article:$doc\n"; break; 
     case 2: echo "Publication:$doc\n"; break; 
     case 3: echo "Library Content:$doc\n"; break; 
     //etc 
    } 
} 
+0

sql_query應完全如您所示 例如... SELECT ID,1 AS表,標題,描述FROM articles 我已經完成了您的文章,當我運行索引器 - 我得到以下錯誤: '錯誤:索引文章:sql_query:您的語法錯誤.....使用附近的'表,標題,說明文章' 有文章中沒有列調用表 - 任何幫助你可以提供將不勝感激:) – Zabs

+0

當然表啊,是mysql中的一個保留字!這個屬性被調用並不重要,只需要在每個索引中使用相同的名稱,編輯了更改爲使用table_id的答案。 – barryhunter

+0

邪惡的巴里你的男人與所有這些獅身人面像的東西! :-) – Zabs