Google App Engine搜索未将创建日期用作默认排名

时间:2014-06-02 16:18:00

标签: google-app-engine full-text-search

在他们的文档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秒会产生相同的结果。

提供您自己的文档排名确实有效。

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