2012-06-09 46 views
9

tôi đang sử dụng API tìm kiếm của Google App Engine (https://developers.google.com/appengine/docs/python/search/). Tôi đã lập chỉ mục tất cả các thực thể và tìm kiếm đang hoạt động tốt. nhưng chỉ khi tôi tìm kiếm các kết quả chính xác khác, nó trả về 0 kết quả. Ví dụ:Google App Engine (python): API tìm kiếm: Tìm kiếm chuỗi

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) 

nếu tôi chạy kịch bản sau đây tôi không nhận được kết quả như sau:

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') 

nhưng nếu tôi thay đổi query_string để "United Kin" hay "United" nó trở lại 0 kết quả như sau:

search.SearchResults(number_found='0') 

Tôi muốn sử dụng API này cho cả tìm kiếm thông thường và AutoSuggest. Điều gì sẽ là cách tốt nhất để đạt được điều này?

Trả lời

16

API tìm kiếm văn bản đầy đủ của App Engine không hỗ trợ kết hợp chuỗi con.

Tuy nhiên, tôi cần bản thân hành vi này để hỗ trợ các đề xuất tìm kiếm khi người dùng nhập. Đây là giải pháp của tôi cho điều đó:

""" 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))]) 

Ý tưởng cơ bản là tạo thủ công từ khóa riêng cho từng chuỗi con có thể. Điều này chỉ thực tế cho các câu ngắn, nhưng nó hoạt động tốt cho mục đích của tôi.

+0

Cảm ơn bạn đã trả lời nick, nhưng tôi có một kho dữ liệu lớn, nếu tôi làm điều đó cho mỗi thực thể trong kho dữ liệu thì sẽ không ảnh hưởng đến kích thước của kho dữ liệu? tôi có 4 mô hình có thể tìm kiếm khác nhau và mỗi mô hình có hơn 100.000 bản ghi trung bình. – Amyth

+0

Có, bạn phải lưu trữ các từ khóa được tạo tự động này cùng với phần còn lại của dữ liệu. –

Các vấn đề liên quan