在 Amazon 中構建複合查詢 CloudSearch - Amazon CloudSearch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon 中構建複合查詢 CloudSearch

您可以使用結構式查詢剖析器透過布林值 andornot 運算子結合各個比對運算式。若要選擇結構式查詢剖析器,您的查詢中應指定 q.parser=structured。結構式查詢運算子是指定成「字首」運算子。語法是:

  • (and boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)

  • (or boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)

  • (not boost=N EXPRESSION)

例如,以下查詢將比對範例資料集內片名包含 staractors 欄位內出現 Harrison Ford 或 William Shatner 但並無 Zachary Quinto 的所有電影。

(and title:'star' (or actors:'Harrison Ford' actors:'William Shatner')(not actors:'Zachary Quinto'))

使用結構式查詢運算子,您將依序指定運算子的名稱和運算子的選項,接著是所要運算的比對運算式:(OPERATOR OPTIONS EXPRESSION)。比對運算式可以是簡單的文字字串,或者是複合查詢的附屬子句。務必先指定任何選項再指定字詞。例如 (and (not field=genres 'Sci-Fi')(or (term field=title boost=2 'star')(term field=plot 'star')))

括號控制著對運算式進行評估的順序。當運算式用括號括住時,會先評估該運算式,接著再使用其結果值評估複合查詢的剩餘部分。

重要

查詢字串中的特殊字元必須以 URL 編碼處理。例如,您必須將結構化查詢中的=運算子編碼為%3D:(term+field%3Dtitle+'star')。Amazon CloudSearch 返回一個InvalidQueryString錯誤,如果特殊字符不是 URL 編碼。如需 URL 編碼的完整參考內容,請參閱 W3C HTML URL 編碼參考

例如,以下查詢將搜尋 title 欄位以找出 star wars 這個片語,並且排除 year 欄位內的值小於 2000 的相符項目。

(and (phrase field='title' 'star wars') (not (range field=year {,2000})))

若要提交此搜尋請求,您必須對查詢字串進行編碼,並且使用 q.parser 參數指定 structured 查詢剖析器。

http://search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch. amazonaws.com/2013-01-01/search?q=(and+(phrase+field='title'+'star wars')+(not+(range+field%3Dyear+{,2000})))&q.parser=structured

結構式查詢語法可讓您對多個欄位進行結合搜尋。如果您未指定欲搜尋的欄位,則會搜尋所有 texttext-array 欄位。例如,以下查詢將搜尋所有 texttext-array 欄位以找出 star 一詞,並且排除 欄位內包含 Zachary Quintoactors 的文件。

(and 'star' (not actors:'Zachary Quinto'))

您可透過指定 boost 值以提高複合查詢的某個運算式相對於其他運算式的重要性。此提升值將提高相符文件的分數。例如,以下查詢會就 欄位而非 欄位內出現 titlestardescription 一詞的相符項目提高其分數。

(and (range field=year [2013,}) (or (term field=title boost=2 'star') (term field=plot 'star'))

提升值必須大於零。

除了、和not之外 andor,Amazon CloudSearch 結構化搜尋語法還支援數個專用運算子:

  • matchall比對網域中的每個文件。語法: matchall.

  • near支援草率短語查詢。distance 值指定片語中的各個單詞可相隔的字數上限,例如 (near field='plot' distance=4 'naval mutiny demonstration')。使用 near 運算子可讓指定的字詞在距離相近但不相鄰時視為相符。如需鬆散片語搜尋的詳細資訊,請參閱搜尋片語。語法: (near field=FIELD distance=N boost=N 'STRING').

  • phrase搜尋texttext-array欄位中的片語;例如,(phrase field="title" 'teenage mutant ninja')。支援就符合運算式的文件提高其分數。如需片語搜尋的詳細資訊,請參閱搜尋片語。語法: (phrase field=FIELD boost=N 'STRING').

  • prefix在文字、文字陣列、常值或常值陣列欄位中搜尋指定的前置字元,後面接著零個或多個字元;例如,。(prefix field='title' 'wait')支援就符合運算式的文件提高其分數。如需字首搜尋的詳細資訊,請參閱搜尋字首。語法:(prefix field=FIELD boost=N 'STRING')

  • range搜尋數值欄位中的值範圍;例如:(range field=year [2000,2013])如需範圍搜尋的詳細資訊,請參閱搜尋某個範圍的值。語法: (range field=FIELD boost=N RANGE).

  • term搜尋任何欄位中的個別字詞或值;例如:(and (term field=title 'star')(term field=year 1977))。語法: (term field=FIELD boost=N 'STRING'|VALUE).

如需如何搜尋特定類型資料的詳細資訊,請參閱以下各節。如需結構化搜尋語法的詳細資訊,請參閱結構化搜尋語法