Mặc dù câu lệnh LIKE (kết hợp từng phần) không được hỗ trợ trong Tìm kiếm văn bản đầy đủ, nhưng bạn có thể hack xung quanh nó.
Thứ nhất, tokenize chuỗi dữ liệu cho tất cả các chuỗi con có thể (hello = h, anh, hel, lo vv)
def tokenize_autocomplete(phrase):
a = []
for word in phrase.split():
j = 1
while True:
for i in range(len(word) - j + 1):
a.append(word[i:i + j])
if j == len(word):
break
j += 1
return a
Xây dựng một chỉ số + tài liệu (Search API) sử dụng chuỗi tokenized
index = search.Index(name='item_autocomplete')
for item in items: # item = ndb.model
name = ','.join(tokenize_autocomplete(item.name))
document = search.Document(
doc_id=item.key.urlsafe(),
fields=[search.TextField(name='name', value=name)])
index.put(document)
Thực hiện tìm kiếm và walah!
results = search.Index(name="item_autocomplete").search("name:elo")
https://code.luasoftware.com/tutorials/google-app-engine/partial-search-on-gae-with-search-api/
Nguồn
2012-11-01 04:57:18
này hoạt động tốt. Tôi đã quản lý chức năng search.index của Ferris để tự động mã hóa tất cả các trường văn bản (thay đổi một dòng) và nó "chỉ hoạt động". Chỉ cần không cố gắng hiển thị trường đã nói cho người dùng trực tiếp từ kết quả tìm kiếm;) –
Tôi cũng đã thêm 'name.lower()' vì tôi gặp một số vấn đề lạ với ngôn ngữ tiếng Nga: Tôi không thể tìm thấy mã thông báo như vậy. –
lưu ý thân thiện: cụm từ là "voila!" –