本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 中構建複合查詢 CloudSearch
您可以使用結構式查詢剖析器透過布林值 and
、or
和 not
運算子結合各個比對運算式。若要選擇結構式查詢剖析器,您的查詢中應指定 q.parser=structured
。結構式查詢運算子是指定成「字首」運算子。語法是:
(and boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)
(or boost=N EXPRESSION1 EXPRESSION2 ... EXPRESSIONn)
(not boost=N EXPRESSION)
例如,以下查詢將比對範例資料集內片名包含 star 且 actors
欄位內出現 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
結構式查詢語法可讓您對多個欄位進行結合搜尋。如果您未指定欲搜尋的欄位,則會搜尋所有 text
和 text-array
欄位。例如,以下查詢將搜尋所有 text
和 text-array
欄位以找出 star 一詞,並且排除 欄位內包含 Zachary Quintoactors
的文件。
(and 'star' (not actors:'Zachary Quinto'))
您可透過指定 boost
值以提高複合查詢的某個運算式相對於其他運算式的重要性。此提升值將提高相符文件的分數。例如,以下查詢會就 欄位而非 欄位內出現 title
stardescription
一詞的相符項目提高其分數。
(and (range field=year [2013,}) (or (term field=title boost=2 'star') (term field=plot 'star'))
提升值必須大於零。
除了、和not
之外 and
or
,Amazon CloudSearch 結構化搜尋語法還支援數個專用運算子:
matchall
比對網域中的每個文件。語法:matchall
.near
支援草率短語查詢。distance
值指定片語中的各個單詞可相隔的字數上限,例如(near field='plot' distance=4 'naval mutiny demonstration')
。使用near
運算子可讓指定的字詞在距離相近但不相鄰時視為相符。如需鬆散片語搜尋的詳細資訊,請參閱搜尋片語。語法:(near field=FIELD distance=N boost=N 'STRING')
.phrase
搜尋text
或text-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)
.
如需如何搜尋特定類型資料的詳細資訊,請參閱以下各節。如需結構化搜尋語法的詳細資訊,請參閱結構化搜尋語法。