取得搜尋索引的相關資訊

Amy Unruh,2012 年 10 月
Google 開發人員關係

簡介

在您建立一些文件並將這些文件新增至某些索引之後,通常會發現檢查索引的結構與內容相當實用。本課程將說明如何進行上述作業。

目標

瞭解 Search API 的索引

必備條件

索引結構定義

每個索引都有相關聯的「結構定義」,用來解譯該索引的查詢。結構定義會透過所有索引文件中存在的欄位名稱與類型動態建立,因此將文件新增至索引也會導致更新索引的結構定義。

查看索引的結構定義會很有幫助,因為您可以看見該索引的資料結構。一個簡單的索引結構定義如下所示:

{'comment': ['TEXT'], 'date': ['DATE'], 'author': ['TEXT'], 'count': ['NUMBER']}

這可以允許索引中的文件搭配指示的欄位類型使用 commentdateauthorcount 這四個欄位。(特定的個別文件並不需要使用這裡的所有欄位。) 結構定義的格式來自一本字典,該字典中的每個鍵都是已新增至索引的文件欄位名稱,對應值則是與該欄位名稱搭配使用的欄位類型清單。如果您將相同的欄位名稱用於不同的欄位類型 (例如在不同的文件中),結構定義將會為該名稱列出一個以上的欄位類型,就像以下這樣:

{'field1': ['TEXT', 'NUMBER']}

以下是一個更為複雜的範例,這是範例應用程式中的產品文件索引結構定義,而且已經新增範例資料。(這個輸出顯示了原始欄位名稱,而非我們在程式碼範例中使用的類別變數)。

{u'category': ['ATOM'], u'publisher': ['TEXT'], u'isbn': ['TEXT'],
 u'description': ['TEXT'], u'name': ['TEXT'], u'author': ['TEXT'],
 u'price': ['NUMBER'], u'title': ['TEXT'], u'pid': ['TEXT'], u'modified': ['DATE'],
 u'tv_type': ['TEXT'], u'ar': ['NUMBER'],
 u'brand': ['TEXT'], u'pages': ['NUMBER'], u'size': ['NUMBER']}

根據預設,在範例應用程式中,這個索引稱為 productsearch1。結構定義會反映出應用程式使用的兩個產品文件類別 (bookshd_televisions),不只顯示出這兩個類別共用的核心產品欄位,還顯示了其中任何一個類別的專屬核心產品欄位,例如 author (僅由 books 使用)、tv_type (僅由 hd_televisions 使用) 等。

查看索引與文件

您可以使用 GCP 主控台的 Cloud Datastore 區段,以查看應用程式索引的資訊以及索引中包含的文件。

透過程式存取索引結構定義

您也可以透過程式存取應用程式的所有索引,以及每個索引的結構定義:

from google.appengine.api import search
import logging

for index in search.get_indexes(fetch_schema=True):
    logging.info("index %s", index.name)
    logging.info("schema: %s", index.schema)

列出的結構定義資訊如以上字典所示。

您可以刪除索引中的所有文件,然後刪除索引結構定義,藉此徹底刪除索引

摘要與回顧

在本課程中,我們已瞭解如何取得應用程式索引及其結構定義的相關資訊。

請對範例應用程式親自進行嘗試:在 GCP 主控台中檢查應用程式的索引,然後嘗試將上一節的程式碼 (其中列出了您的索引與結構定義) 加到 handlers.pyIndexHandler 類別的 get() 方法中:

class IndexHandler(BaseHandler):
  """Displays the 'home' page."""

  def get(self):
    cat_info = models.Category.getCategoryInfo()
    sort_info = docs.Product.getSortMenu()
    # add this code temporarily to look at your indexes
    for index in search.get_indexes(fetch_schema=True):
      logging.info("index %s", index.name)
      logging.info("schema: %s", index.schema)
    template_values = {
        'cat_info': cat_info,
        'sort_info': sort_info,
        }
    self.render_template('index.html', template_values)

您只應暫時新增此程式碼,因為這會增加要求的費用。當您重新部署應用程式,然後在您載入索引頁面時查看其記錄,您會看到列出的索引與結構定義。

我們現在已經完成了索引與查詢內容的基本概念,您所擁有的工具可以將全文搜尋新增到 App Engine 應用程式中。但是,Search API 支援的查詢功能遠比我們目前介紹的要多。在接下來的深入瞭解 Python Search API 課程中,我們會深入探討如何建構搜尋查詢,以及說明如何控管及排序傳回的結果。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境