查詢和排序選項

當您只使用查詢字串來呼叫 Index.Search 方法時,系統會根據預設的查詢選項傳回結果:

  • 以遞減順序排序傳回文件
  • 一次以 20 份為一組傳回文件
  • 擷取的文件包含其原始欄位

您可以使用 SearchOptions 結構的執行個體,做為 Search 的引數來變更這些選項。SearchOptions 結構可讓您指定一次要傳回多少文件,也可以讓您自訂要擷取文件的內容。您可以要求只傳回文件 ID,或要求文件只包含欄位子集。您也可以使用欄位運算式,在擷取的文件中建立自訂欄位 (其中欄位值擷取自文件中的其他欄位)。

除了查詢選項外,SearchOptions 結構也包括 SortOptions 結構的執行個體。您可以使用排序選項來變更排序順序,也可以依多個索引鍵排序結果。

SearchOptions

這些屬性控制要傳回多少筆結果以及結果的排序方式,彼此互斥的位移和游標選項則支援分頁。這兩個選項可指定在結果中要傳回哪些特定的文件。

屬性 說明 預設 上限
Limit 在結果中要傳回的文件數量上限。 20 1000
Offset 要傳回的第一份文件在結果中的位移量。 0。結果將包含所有符合的文件 (上限以內)。 1,000
Cursor 可使用游標取代位移,擷取一組組經過排序的文件。將游標傳入及傳出連續查詢時會更新游標,每次重新查詢時,都會從上一頁的結尾處往下接著進行。關於游標和位移的資訊,Go 搜尋參考資料頁面有相關討論。 空值。結果將包含所有符合的文件 (上限以內)。 -
Sort 設定 SortOptions 結構可控制搜尋結果的排序方式。SortOptions 的執行個體有自己的一組屬性,下方會進一步說明。 空值。以遞減順序排序文件。 -

這些屬性會控制在結果中顯示哪些文件欄位。

屬性 說明 預設
IDsOnly 設為 truefalse。設為 true 時,在結果中傳回的文件只會包含 ID,而不包含欄位。 false (傳回所有欄位)。
Fields 指定要在結果中包含哪些文件欄位。最多可指定 100 個欄位。 傳回所有文件欄位 (最多 100 個欄位)。
Expressions 欄位運算式,說明要將哪些經過運算的欄位新增至搜尋結果傳回的每份文件。這些欄位會新增至文件的運算式屬性。欄位值則藉由撰寫運算式來指定 (可能包括一或多個文件欄位)。

SortOptions

SortOptions 的屬性可控制搜尋結果的排序和計分。

屬性 說明 預設
Expressions SortExpressions 的一個部分,代表文件的多維度排序。
Scorer 可選用的 Scorer。此屬性存在時,將會依據搜尋字詞的頻率,對文件進行計分。分數會在 _score 欄位中提供。就計費作業和執行時間而言,對文件計分可能所費不貲,並且可能拖慢您的搜尋速度。請謹慎使用計分。
Limit 可計分及/或排序的物件數量上限。不可超過 10,000。 1,000

依多個索引鍵排序

您可以依多個排序索引鍵來排序搜尋結果。各索引鍵可以是單純的欄位名稱,也可以是從多個欄位計算出的值。這個運算式會根據下一節中的規則進行建構。

SortExpression 也會定義排序的方向,以及系統無法對某份文件計算運算式時所要使用的預設索引鍵值。以下列出所有的屬性:

屬性 說明 預設
Expr 對每個符合文件的結果進行排序時,所要評估的運算式。
Reverse 如果設為 true,系統會反向排序搜尋結果,結果將依遞增順序顯示 (而非依預設的遞減順序顯示)。 false
Default 運算式預設值,文件中若沒有出現此欄位,即無法計算。文字排序必須指定文字值。如果是數字排序則必須指定數值。

依多值欄位排序

依特定類型的多值欄位排序時,只會使用指派至該欄位的第一個值。舉例來說,假設 DocA 和 DocB 這兩份文件都有一個名稱為「color」的文字欄位。系統會將兩個值按照順序 (red、blue) 指派給 DocA 的「color」欄位,並將兩個值按照順序 (green、red) 指派給 DocB。當您指定依文字欄位「color」執行排序時,系統會依「red」這個值排序 DocA,並依「green」這個值排序 DocB。其他欄位值不會用於排序。

排序與否

如果您沒有指定任何排序選項,系統會自動以遞減順序排序傳回的搜尋結果。此時,傳回的文件數量沒有限制。如果您有指定排序選項,則系統會在選好所有符合的文件之後執行排序。有一個明確屬性 SortOptions.Limit 可控制排序的規模。要排序的文件不能超過 10,000 份,預設值是 1,000。如果符合的文件數量超過 SortOptions.Limit 指定的數量,則搜尋只會擷取、排序並傳回有限的數量。系統會從所有符合文件 (遞減排列) 的清單中選擇要排序的文件。查詢所選出的符合文件可能會超過您可以排序的數量。如果您想要使用排序選項,且必須擷取所有符合文件,則應該設法確保查詢所傳回的文件不會超過您可以排序的數量。

撰寫運算式

運算式用於定義欄位運算式 (在 SearchOptions 中設定) 和排序運算式 (在 SortOptions 中設定)。這些運算式的撰寫形式是字串:

"price * quantity"
"(men + women)/2"
"min(daily_use, 10) * rate"
"snippet('rose', flower, 120)"

與數字欄位相關的運算式可以使用算術運算子 (+、-、*、/),以及下方所列的內建數值函式。與地理點欄位相關的運算式可以使用地理點函式和距離函式。文字欄位和 HTML 欄位的運算式可以使用程式碼片段函式。

運算式也有可能包含這些特殊字詞:

字詞 說明
_rank 文件的排名屬性,可用於欄位運算式和排序運算式。
_score SortOptions 中包含 Scorer 時指派給文件的分數。此字詞只能出現在排序運算式中;不能用於欄位運算式。

數字函式

用於定義 FieldExpressionsSortExpressions 之數值的運算式可以使用這些內建函式。引數必須是數字、欄位名稱或是使用數字和欄位名稱的運算式。

函式 說明 範例
max 會傳回引數最大值。 max(recommended_retail_price, discount_price, wholesale_price)
min 會傳回引數最小值。 min(height, width, length)
log 會傳回自然對數。 log(x)
abs 會傳回絕對值。 abs(x)
pow 需要兩個數字引數。呼叫 pow(x, y) 會計算出 x 的 y 次方值。 pow(x, 2)
count 需以一個欄位名稱做為引數。會傳回文件中使用該名稱的欄位數量。請注意,一份文件可包含同名但類型不同的多個欄位。附註:count 僅限用於 FieldExpressions,不能出現在 SortExpressions 中。 count(user)

地理點函式

這些函式可用於與地理點欄位相關的運算式。

函式 說明 範例
geopoint 定義已知經緯度時的地理點。 geopoint(-31.3, 151.4)
distance 會計算出這兩個地理點之間的距離 (單位為公尺)。請注意,這兩個引數都可以是地理點欄位的名稱,或地理點函式的叫用名稱。不過,只能有一個引數是欄位名稱。 distance(geopoint(23, 134), store_location)

程式碼片段

程式碼片段是指文字欄位的一個片段,該片段符合查詢字串且包括周圍文字。程式碼片段藉由呼叫 snippet 函式產生:

snippet(query, body, [max_chars])

query
加上引號的查詢字串,會指定要在欄位中要尋找的文字。
body
文字、HTML 或 atom 欄位的名稱。
max_chars
程式碼片段中傳回的字元數上限。這是選用引數;預設為 160 個字元。

此函式會傳回 HTML 字串。此字串包含由內文欄位值組成的程式碼片段,與查詢相符的文字會以粗體顯示。

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

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

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