【问题标题】:How do I use AppEngine and Search API to search by the DocId?如何使用 AppEngine 和 Search API 按 DocId 进行搜索?
【发布时间】:2013-11-15 00:14:42
【问题描述】:

我需要按 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。在管理界面中,它将 DocId 显示为字段之一! http://localhost:8888/_ah/admin/search?subsection=searchIndex...

【问题讨论】:

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


    【解决方案1】:

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

    这是the documentation的引述

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

    【讨论】:

      【解决方案2】:

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

      doc = index.get("AZ125")

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

      【讨论】:

      • 因为我需要做一个查询来限制很多文档的结果。例如,我需要查询 year = 2012country=Germany 仅针对特定文档集的位置。如果我使用 index.get(),我将不得不一次加载每个文档并进行手动比较。我需要搜索六个字段。使用 index.get() 会完全绕过 Search API,那又有什么意义呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2014-11-29
      相关资源
      最近更新 更多