如何使用AppEngine和Search API按DocId进行搜索?

时间:2013-11-15 00:14:42

标签: google-app-engine google-search-api

我需要通过DocId进行搜索,因为我在Drive中有文件,我也在搜索,需要合并结果。我还需要通过其他字段限制结果。我试过这个问题:

INFO: Searching with query:  DocId:(4842249208725504 5405199162146816 5510752278413312 5581121022590976 5827411627212800) 

然而,即使它们存在,它也找到了0个结果。我还尝试了doc_idid

    log.info("Searching with query: " + q);
    try {
        Results<ScoredDocument> results = getIndex().search(q);

我还需要按其他字段过滤,例如:

DocId:(123456789) year:(2012)

其他字段在搜索期间有效,但不是DocId。在Admin界面中,它将DocId显示为其中一个字段! http://localhost:8888/_ah/admin/search?subsection=searchIndex...

Imgur

2 个答案:

答案 0 :(得分:3)

在每个文档中都有一个名为docId的原子字段,并在该字段中传递doc id。然后你可以按照正常情况进行搜索(按照你的建议)。

以下是the documentation

的引用
  

虽然创建可读,有意义的独特文档很方便   标识符,您不能在搜索中包含doc_id。考虑一下   场景:您有一个索引,其中包含表示部件的文档   部件的序列号为doc_id。这将是非常有效的   检索任何单个部分的文档,但这是不可能的   搜索一系列序列号以及其他字段值,   如购买日期。将序列号存储在原子字段中   解决了这个问题。

答案 1 :(得分:1)

如果您事先知道文档ID,而不是直接搜索它,为什么不直接获取它?

  

doc = index.get(“AZ125”)

https://developers.google.com/appengine/docs/python/search/#Python_Retrieving_documents_by_doc_ids