2011-05-23 11 views
11

के साथ स्फिंक्स एपीआई को लागू करने में समस्या मैं परियोजना पर काम कर रहा हूं जहां मुझे केक php के साथ स्फिंक्सशर्च को लागू करने की आवश्यकता है। इसलिए मैं बस इसमें एक घटक और व्यवहार का उपयोग करने की कोशिश कर रहा हूं। यह करने के लिए लिंक, है: -केक php

http://bakery.cakephp.org/articles/eugenioclrc/2010/07/10/sphinx-component-and-behavior

मैं विनती करता हूँ नीचे की तरह स्फिंक्स एपीआई:

$sphinx = array('matchMode' => SPH_MATCH_ALL, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => 'Search_Query', 'sphinx' => $sphinx)); 

pr($result); 

ऊपर के लिए यह ठीक काम कर रहा है, लेकिन जब मैं प्रतिक्रिया समय के लिए क्वेरी करने को कम से कम करने की कोशिश की तालिका का एक विशेष क्षेत्र (विस्तारित मिलान मोड, यानी SPH_MATCH_EXTENDED2 का उपयोग करके), स्फिंक्स बस किसी भी परिणाम को आउटपुट करने में विफल रहता है। विस्तारित क्वेरी जो मैंने उपयोग की है वह नीचे दी गई है: -

$sphinx = array('matchMode' => SPH_MATCH_EXTENDED2, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => '@Field_name Search_Query', 'sphinx' => $sphinx)); 

pr($results); 

क्या कोई यह पहचान सकता है कि मैं इसके साथ गलत कहां जा रहा हूं? अगर मैं कुछ गलत कह रहा हूं तो कृपया मदद करें।

अग्रिम धन्यवाद।

उत्तर

1

Btw, जब आप EXTENDED2 मोड का उपयोग सुनिश्चित करें कि आपके रैंक मोड तदनुसार सेट है।

संपादित:

वैसे भी आपसे समस्या यह है कि घटक/व्यवहार कोड को देखकर आप तुरंत कि कोई त्रुटि जाँच जो भी किया जाता है देख सकते हैं। कोड को थोड़ा सा बदलने का प्रयास करें ताकि आप कम से कम त्रुटियों और/या चेतावनियों को देख सकें।

घटक

if(!isset($query['search'])){ 
    $result = self::$sphinx->Query('', $indexes);  
} else { 
    $result = self::$sphinx->Query($query['search'], $indexes); 
} 

if ($result === false) { 
    // throw new SphinxException(); 
    die(self::$sphinx->GetLastError()); 
} 
$warn = self::$sphinx->GetLastWarning(); 
if ($warn) echo $warn; 

व्यवहार

$result=$this->runtime[$model->alias]['sphinx']->search($s); 
if ($result === false) { 
    die($this->runtime[$model->alias]['sphinx']->GetLastError()); 
} 
$warn = $this->runtime[$model->alias]['sphinx']->GetLastWarning(); 
if ($warn) echo $warn; 

मुझे आशा है कि मदद करता है।

+1

@Tralamazza: मित्र, मैं वहां पर वास्तविक फ़ील्ड नहीं लगाऊंगा। यह समझने के लिए कि मैं क्या कर रहा हूं, यह विशेषज्ञों को यहां बनाने के लिए है। यह मेरी परियोजना का हिस्सा है, इसलिए मैं यहां वास्तविक कोड नहीं डालूंगा। –

+1

@Tralamazza: बस इतना ही आपको पता है, एसओ पर * बेवकूफ सवाल * लिखना थोड़ा खतरनाक है।अक्सर कोई गलत समझता है और इसे लेता है कि आप मूल प्रश्न बेवकूफ कह रहे हैं और आप कुछ नीचे वोट और/या आपत्तिजनक झंडे कमाएंगे। –

+0

@Tralamazza यह एक टिप्पणी के रूप में बेहतर सेवा दी जाएगी। – JohnP

1

जैसा कि आपने कहा,

स्फिंक्स सिर्फ उत्पादन के लिए किसी भी परिणाम विफल रहता है।

इसका मतलब है कि यह एक त्रुटि है:

कृपया sql_query

का उपयोग करके देखना होगा कि आपने अनुक्रमण के लिए विशिष्ट क्षेत्र को शामिल किया है

यह भी जांच करता है, तो क्षेत्र आप खोज रहे हैं एक विशेषता
नहीं है स्फिंक्स प्रलेखन के अनुसार:

फ़ील्ड के विपरीत गुण पूर्ण-पाठित नहीं हैं। वे इंडेक्स में संग्रहीत हैं, लेकिन उन्हें पूर्ण-पाठ के रूप में खोजना संभव नहीं है, और ऐसा करने का प्रयास करने में त्रुटि होती है।

संबंधित मुद्दे