2012-06-09 23 views
9

मैं Google ऐप इंजन सर्च एपीआई (https://developers.google.com/appengine/docs/python/search/) का उपयोग कर रहा हूं। मैंने सभी इकाइयों को अनुक्रमित किया है और खोज ठीक काम कर रही है। लेकिन केवल अगर मैं सटीक मैचों की खोज करता हूं तो यह 0 परिणाम देता है। उदाहरण के लिए:Google ऐप इंजन (पायथन): खोज एपीआई: स्ट्रिंग सर्च

from google.appengine.api import search 

_INDEX_NAME = 'searchall' 


query_string ="United Kingdom" 
query = search.Query(query_string=query_string) 
index = search.Index(name=_INDEX_NAME) 

print index.search(query) 

अगर मैं निम्न स्क्रिप्ट मैं इस प्रकार के परिणाम प्राप्त कर चलाएँ:

search.SearchResults(results='[search.ScoredDocument(doc_id='c475fd24-34ba-42bd-a3b5-d9a48d880012', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395666'), search.ScoredDocument(doc_id='5fa757d1-05bf-4012-93ff-79dd4b77a878', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395201')]', number_found='2') 

लेकिन अगर मैं बदल query_string"United Kin" या "United" में वापस 0 परिणाम इस प्रकार है:

search.SearchResults(number_found='0') 

मैं सामान्य खोज और ऑटो सुझाव दोनों के लिए इस एपीआई का उपयोग करना चाहता हूं। इसे हासिल करने का सबसे अच्छा तरीका क्या होगा?

उत्तर

16

ऐप इंजन की पूर्ण पाठ खोज API सबस्ट्रिंग मिलान का समर्थन नहीं करती है।

हालांकि, मुझे उपयोगकर्ता के प्रकार के रूप में खोज सुझावों का समर्थन करने के लिए स्वयं को इस व्यवहार की आवश्यकता थी। यहां मेरा समाधान है:

""" Takes a sentence and returns the set of all possible prefixes for each word. 
    For instance "hello world" becomes "h he hel hell hello w wo wor worl world" """ 
def build_suggestions(str): 
    suggestions = [] 
    for word in str.split(): 
     prefix = "" 
     for letter in word: 
      prefix += letter 
      suggestions.append(prefix) 
    return ' '.join(suggestions) 

# Example use 
document = search.Document(
    fields=[search.TextField(name='name', value=object_name), 
      search.TextField(name='suggest', value=build_suggestions(object_name))]) 

मूल विचार मैन्युअल रूप से प्रत्येक संभावित सबस्ट्रिंग के लिए अलग-अलग कीवर्ड उत्पन्न करना है। यह केवल लघु वाक्यों के लिए व्यावहारिक है, लेकिन यह मेरे उद्देश्यों के लिए बहुत अच्छा काम करता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद निक, लेकिन मैंने एक बड़ा डेटास्टोर चुप कर दिया है, अगर मैं डेटास्टोर में प्रत्येक इकाई के लिए ऐसा करता हूं तो डेटास्टोर के आकार को प्रभावित नहीं करेगा? मुझे 4 अलग-अलग खोज योग्य मॉडल पसंद हैं और उनमें से प्रत्येक के औसत पर 100,000 से अधिक रिकॉर्ड हैं .. – Amyth

+0

हां, आपको अपने शेष डेटा के साथ इन ऑटो-जेनरेट किए गए कीवर्ड को स्टोर करना होगा। –

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

  • कोई संबंधित समस्या नहीं^_^