2015-05-15 3 views
12

का उपयोग किए बिना PHP में स्फिंक्सक्ल का उपयोग करते समय क्वेरी के क्रम में क्वेरी का उपयोग कैसे करें, मैं mysql FTS का उपयोग कर रहा हूं, लेकिन हाल ही में परीक्षण उद्देश्य के लिए स्फिंक्स पर स्विच किया गया है। centos परस्फिंक्सक्ल - sphinxapi.php

स्थापित स्फिंक्स 7

Linux production 3.10.0-123.8.1.el7.x86_64 #1 GNU/Linux 

sphinx.conf

source content_src1 
{ 
    type   = mysql 
    sql_host  = localhost 
    sql_user  = 
    sql_pass  = 
    sql_db   = t_prod2 
    sql_port  = 3306 # optional, default is 3306 

    sql_query  = \ 
     SELECT content.record_num, \ 
        content.title, \ 
        content.category, \ 
        content.upload_date, \ 
        content.comments_count, \ 
        content.verified, \ 
        content.uploader, \ 
        content.size \ 
        FROM content WHERE enabled = 1 

    sql_attr_uint  = record_num 
    sql_attr_string = title 
} 


index content_index1 
{ 
    source   = content_src1 
    path   = /var/lib/sphinx/content_index1 
    morphology    = stem_en 

    min_word_len   = 1 
    min_prefix_len   = 0 
    min_infix_len   = 1 
    docinfo     = extern 

} 

मैं PHP का उपयोग कर रहा sphinxql कनेक्ट और प्रश्नों को चलाने के लिए, .like इस

$sphinxql = @mysqli_connect($sphinxql_host.':'.$sphinxql_port,'',''); 

$sphinxql_query = "SELECT id FROM $sphinx_index WHERE MATCH('".mysqli_real_escape_string($prod1,$q)."') LIMIT $from,$max_results"; 

सरल प्रश्न है ठीक काम कर रहा है, यानी शर्त के बिना किसी आदेश के प्रश्न। लेकिन जब मैंने क्रमशः एसक्यूएल प्रश्नों को चलाने की कोशिश की, तो स्फिंक्स त्रुटियों को फेंक रहा है।

यानी क्वेरी और उनकी त्रुटियां।

SELECT id FROM $sphinx_index WHERE MATCH('".mysqli_real_escape_string($prod1,$q)."') ORDER BY title DESC LIMIT $from,$max_results 

index content_index1: sort-by attribute 'title' not found 

एक और कोशिश, मैं @field नाम के साथ क्षेत्र का नाम बदल दिया

SELECT id FROM $sphinx_index WHERE MATCH('".mysqli_real_escape_string($prod1,$q)."') ORDER BY @title DESC LIMIT $from,$max_results 

sphinxql: syntax error, unexpected USERVAR, expecting IDENT (or 55 other tokens) near '@title DESC LIMIT 0,25' 

मेज, शीर्षक, श्रेणी, अपलोड किया गया, आकार जैसे क्षेत्रों से आदेश है सत्यापित

तो मैं कैसे आदेश का उपयोग कर सकते मेरी sphinxql क्वेरी में से


अद्यतन 1

मैंने "ऑर्डर न होने" के प्रश्नों को चलाने में कामयाब रहे हैं, लेकिन "ऑर्डर द्वारा" ठीक से काम नहीं करने वाले प्रश्नों में त्रुटि नहीं है, परिणाम सेट देता है, लेकिन अगर मैं विशेषता द्वारा सॉर्ट की दिशा बदलता हूं, तो परिणाम सेट नहीं होते हैं परिवर्तन।

अद्यतन फ़ील्ड और विशेषताओं के रूप में हैं।

sql_field_string = title 
sql_field_string = og_name 
sql_field_string = hash 
sql_field_string = keywords 

sql_attr_timestamp = upload_date_timestamp 

sql_attr_uint = category 
sql_attr_uint = comments_count 
sql_attr_bool = verified 
sql_attr_bigint = size 
+0

शायद आवश्यकता पर शीर्षक COLLATE utf8_general_ci डीईएससी द्वारा आदेश निर्दिष्ट करें –

उत्तर

2

क्या आपने उस कॉलम का उपयोग sql_attr_string के रूप में करने का प्रयास किया है? छंटाई और समूहीकरण (के लिए इस्तेमाल किया जा सकता

2.0.1-बीटा स्ट्रिंग विशेषताओं से शुरू:

http://sphinxsearch.com/docs/current.html#conf-sql-attr-string

आप इस तरह के विशेषता पर खंड एक ORDER BY उपयोग करने के लिए कम से कम संस्करण 2.0.1 जरूरत ग्रुप ऑर्डर द्वारा ग्रुप बाय द्वारा ऑर्डर करें)।