在他们的文档Google says that App Engine's search api uses current timestamp as document rank by default中,但它没有。以下代码:
from google.appengine.api import search
index = search.Index("my_index")
index.put([search.Document(doc_id="doc1", fields=[search.TextField(name="k",value="val")])])
index.put([search.Document(doc_id="doc2", fields=[search.TextField(name="k",value="val")])])
index.put([search.Document(doc_id="doc3", fields=[search.TextField(name="k",value="val")])])
print [r.doc_id for r in index.search("k:val")]
打印出来:`[u' doc2',u' doc3',u' doc1']```
在put
次调用之间延迟1秒会产生相同的结果。
提供您自己的文档排名确实有效。
答案 0 :(得分:2)
我认为它运作正常。默认情况下,搜索按降序排名(https://developers.google.com/appengine/docs/python/search/best_practices)返回结果。因此,如果在插入'doc1'和其他插入之间设置延迟,则doc1的时间戳最小,因此在结果中显示为最后一个。
以下是示例代码的略微增强版本。它使用两个延迟并打印出doc_id以及时间戳:
from google.appengine.api import search
import webapp2
import time
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
index = search.Index("my_index")
index.put([search.Document(doc_id="doc1", fields=[search.TextField(name="k",value="val")])])
time.sleep(1)
index.put([search.Document(doc_id="doc2", fields=[search.TextField(name="k",value="val")])])
time.sleep(1)
index.put([search.Document(doc_id="doc3", fields=[search.TextField(name="k",value="val")])])
self.response.write([r.doc_id + ", " + str(r.rank) for r in index.search("k:val")])
application = webapp2.WSGIApplication([
(r'/.*', MainPage),
], debug=True)
示例输出:
[u'doc3,107916240',u'doc2,107916239',u'doc1,107916238']