2010-09-11 12 views
8

मैं अपने पायथन एपीआई के साथ स्फिंक्स सर्च इंजन का उपयोग करने की कोशिश कर रहा हूं। स्थापना ठीक हो गई। लेकिन जब मैं अपने पायथन एपीआई का उपयोग करता हूं तो मुझे पूरा परिणाम सेट नहीं मिलता है। मुझे केवल आईडी मिलती है? लेकिन जब मैं उनके ./search बाइनरी का उपयोग करता हूं ./bin मुझे पूरी अनुक्रमित सामग्री मिलती है।स्फिंक्स सर्च इंजन और पायथन एपीआई

सीपीपी का उपयोग करते समय ./search द्विआधारी -

./search test 

1. document=1, weight=1, group_id=1, date_added=Sat Sep 11 07:42:38 2010, title=2 
    id=1 
    group_id=1 
    group_id2=5 
    date_added=2010-09-11 07:42:38 
    title=test one 
    content=this is my test document number one. also checking search within phrases. 

लेकिन जब मैं अजगर एपीआई का उपयोग, मैं -

>>> import sphinxapi 
>>> client = sphinxapi.SphinxClient() 
>>> client.SetServer('127.0.0.1', 9312) 
>>> client.Query('test') 
{'status': 0, 'matches': [{'id': 1, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 2}}, {'id': 2, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 3}}, {'id': 4, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 2, 'title': 1}}], 'fields': ['content'], 'time': '0.022', 'total_found': 3, 'warning': '', 'attrs': [['group_id', 1], ['date_added', 2], ['title', 3]], 'words': [{'docs': 6, 'hits': 6, 'word': 'test'}], 'error': '', 'total': 3} 

मैं 'शीर्षक' या 'की तरह स्ट्रिंग क्षेत्रों कैसे मिलता है सामग्री सेट के परिणाम के रूप में सामग्री '?

+2

'Query' प्रत्येक मैच के प्रतिलिपि प्राप्त क्षेत्रों की सामग्री को वापस नहीं करता है: के बाद एक उदाहरण है। यह केवल पूर्णांक गुण और दस्तावेज़ आईडी (क्रम में) देता है। दस्तावेज़ डेटा पुनर्प्राप्त करने के लिए आपको अतिरिक्त SQL क्वेरी करना होगा। प्रतिक्रिया के लिए – leoluk

+0

@leoluk धन्यवाद! यदि आपने जो कहा वह सच है तो मुझे वास्तव में अपना डेटा प्राप्त करने के लिए अतिरिक्त SQL क्वेरी करना होगा। क्या कोई तरीका है कि मैं उन्हें स्फिंक्स से ही प्राप्त कर सकता हूं? चूंकि स्पष्ट रूप से इसके सूचकांक में प्रासंगिक पाठ है ... –

+0

हां, यह संभव है, लेकिन अगर मुझे पता था कि मैंने इसका जवाब कैसे दिया है – leoluk

उत्तर

4

आप sql_field_string इस्तेमाल कर सकते हैं - अपने config

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

में जोड़ने के लिए यह होगा इन क्षेत्रों के सूचकांक डेटा और स्ट्रिंग विशेषताओं के रूप में तो आप अतिरिक्त SQL क्वेरी के बिना अपने परिणाम सेट में उन्हें मिल सकता है भी इन क्षेत्रों की दुकान।

हालांकि सभी गुण स्ट्रिंग गुण हमेशा स्मृति में लोड होते हैं, यही कारण है कि आप जल्दी से अपनी बॉक्स मेमोरी से बाहर निकल सकते हैं।

+0

यह स्फिंक्स आम में बताया गया है गलतियों http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/ और इसका मिलान करने के लिए SHOW_META निर्देश का उपयोग करने का उल्लेख किया गया है जो मिलान किया गया था की अधिक जानकारी देखने के लिए। – stommepoes

+0

@tmg_tt http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python कृपया उत्तर दें – Sandeep

+0

मैंने इस क्वेरी को चलाया है लेकिन अनुरोध नहीं मिला है। यह http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

हालांकि ऐसा करना संभव है, मुझे नहीं लगता कि स्फिंक्स में "स्रोत" को स्टोर करना एक अच्छा विचार है। स्फिंक्स केवल एक समर्पित खोज इंजन के लिए बहुत तेज़ है (आपको केवल आईडी और शायद रैंकिंग स्कोर दे रहा है - यदि आपको इसकी आवश्यकता है)।

बीटीडब्ल्यू, आधिकारिक स्फिंक्सशर्च एपीआई शायद ही अपडेट किया गया है, आप वास्तव में MySQL ड्राइवर/मॉडुल (उदा। Pymysql) का उपयोग कर सकते हैं।

import pymysql 
db = pymysql.connect(host='127.0.0.1',port=9301,user='',passwd='',charset='utf8',db='') 
cur = db.cursor() 
qry='SELECT id,weight() FROM idx_name WHERE MATCH(\'"your Query"/1\') LIMIT 10 OPTION ranker=SPH04' 
cur.execute(qry);row = cur.fetchall() 
print(row) 
cur.close();db.close() 
+0

http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python – Sandeep

+0

http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

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