Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

phrase

項目一覧

  • 定義
  • 構文
  • オプション
  • 単一フレーズの例
  • 複数フレーズの例
  • スローの例
  • シノニム(同意語)の例
phrase

演算子は、 インデックス構成 で指定されたphrase アナライザ を使用して、順序付けられたタームのシーケンスを含むドキュメントを検索します。アナライザが指定されていない場合は、デフォルトの標準アナライザ が使用されます。

phrase の構文は次のとおりです。

1{
2 $search: {
3 "index": <index name>, // optional, defaults to "default"
4 "phrase": {
5 "query": "<search-string>",
6 "path": "<field-to-search>",
7 "score": <options>,
8 "slop": <distance-number>,
9 "synonyms": "<synonyms-mapping-name>"
10 }
11 }
12}

phrase では、次の用語を使用してクエリを作成します。

フィールド
タイプ
説明
必要性

query

文字列または複数の文字列の配列

検索する文字列または複数の文字列。

はい

path

文字列または複数の文字列の配列

インデックス付きフィールドまたは検索するフィールド。ワイルドカード パス を指定して検索することもできます。詳しくは、「 クエリ パスを構築する 」を参照してください。

重要: phrase演算子を使用するには、 プロパティをstring indexOptionspositionsまたはデフォルト値の に設定して、クエリフィールドをoffsets としてインデックス化する必要があります。詳細については、 「string フィールドのプロパティの構成」 を参照してください。

はい

slop

integer

queryフレーズ内の単語間の許容距離。 値を小さくすると、単語間の位置的距離が短くなり、値を大きくすると単語の再構成が行われ、クエリを満たす単語間の距離が長くなります。 デフォルトは0であり、一致と見なされるためには、単語がクエリと完全に同じ位置にある必要があることを意味します。 完全一致はよりスコアが高くなります。

no

score

オブジェクト

一致する検索結果に割り当てる スコア 。 デフォルトのスコアは、次のオプションを使用して変更できます。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 結果のスコアを指定された式で置き換えます。

配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。

デフォルトのスコアを変更するオプションの詳細については、「 結果内のドキュメントのスコアリング 」を参照してください。

no

synonyms

string

シノニム(同意語)を使用してクエリを実行するために必要です。

インデックス定義内のシノニム(同意語)マッピングの定義名。値は空の文字列にできません。

シノニム(同意語)マッピングを使用するクエリを Atlas Search が実行するのにかかる時間は、シノニム ソース コレクション内のドキュメントの数とサイズによって異なります。

たとえば、非常に少ないシノニムドキュメントに基づいたシノニムマッピングを使うクエリは、多くのシノニムドキュメントに基づいたシノニムマッピングを使うクエリよりも速くなるかもしれません。

任意

このページの例では、sample_mflix データベース内の movies コレクションを使用します。サンプルデータセット をクラスターにロードしたら、動的マッピングを使用して Atlas Search インデックスを作成し、クラスターでサンプルクエリを実行します。シノニムの例を試すには、synonymous_terms コレクションsample_mflix データベースに追加し、synonyms マッピングコレクションでインデックスを定義する必要があります。

Atlas Searchの次の例では、クエリstring new yorktitle フィールドの基本検索を実行します。 クエリに slop がないため、slop 値はデフォルトで 0 になります。つまり、結果に含めるには、単語の位置がクエリstringと完全に一致している必要があることを意味します。 クエリには次の要素も含まれます。

  • $limit ステージを使用して、出力結果を 10 に制限します。

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "new york"
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'New York, New York', score: 6.786321640014648 }
3 { title: 'New York', score: 6.258549213409424 }
4 { title: 'New York Stories', score: 5.3813982009887695 }
5 { title: 'New York Minute', score: 5.3813982009887695 }
6 { title: 'Synecdoche, New York', score: 5.3813982009887695 }
7 { title: 'New York Doll', score: 5.3813982009887695 }
8 { title: 'Little New York', score: 5.3813982009887695 }
9 { title: 'Escape from New York', score: 4.719893455505371 }
10 { title: 'Naked in New York', score: 4.719893455505371 }
11 { title: 'Autumn in New York', score: 4.719893455505371 }
12]

Atlas Search の次の例では、クエリ文字列the manthe moontitleフィールドで基本的な検索を実行します。 クエリに slop がないため、slop 値はデフォルトで 0 になります。つまり、結果に含めるには、単語の位置がクエリstringと完全に一致している必要があることを意味します。 クエリには次の要素も含まれます。

  • $limit ステージを使用して、出力を 10 に制限します。

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": ["the man", "the moon"]
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'The Man in the Moon', score: 4.4830474853515625 },
3 { title: 'Shoot the Moon', score: 3.252699851989746 },
4 { title: 'Kick the Moon', score: 3.252699851989746 },
5 { title: 'The Man', score: 2.8923356533050537 },
6 { title: 'The Moon and Sixpence', score: 2.8528637886047363 },
7 { title: 'The Moon Is Blue', score: 2.8528637886047363 },
8 { title: 'Racing with the Moon', score: 2.8528637886047363 },
9 { title: 'Mountains of the Moon', score: 2.8528637886047363 },
10 { title: 'Man on the Moon', score: 2.8528637886047363 },
11 { title: 'Castaway on the Moon', score: 2.8528637886047363 }
12]

Atlas Searchの次の例では、クエリstring men womentitle フィールドを検索します。 query5slop値により、単語の移動が大きくなり、 menwomenの間の距離が可能になります。 クエリには、次の操作を行うための$projectステージが含まれています。

  • すべてのフィールドを除外。例外: title

  • 次のフィールドを追加: score

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "men women",
7 "slop": 5
8 }
9 }
10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])
1[
2 { title: 'Men Without Women', score: 3.367523193359375 },
3 { title: 'Men Vs Women', score: 3.367523193359375 },
4 { title: 'Good Men, Good Women', score: 2.8529787063598633 },
5 { title: 'The War Between Men and Women', score: 2.1851978302001953 },
6 { title: 'Women Without Men', score: 1.9656763076782227 },
7 { title: 'Women Vs Men', score: 1.9656763076782227 }
8]

次のクエリは、指定されたクエリ文字列内の用語を movies コレクションの plot フィールドで検索します。Atlas Search では、シノニム(同意語)ソースコレクション synonymous_terms 内のマッピングタイプに基づき結果が返されます。このマッピングタイプは、sample_mflix.movies コレクションのインデックスのシノニムマッピング定義で指定されます。

次のクエリは、plot フィールドの任意の場所で、単語間の距離が 5 までの範囲で automobile race というフレーズを検索します。

db.movies.aggregate([
{
$search: {
"phrase": {
"path": "plot",
"query": "automobile race",
"slop": 5,
"synonyms": "my_synonyms"
}
}
},
{
"$limit": 5
},
{
$project: {
"_id": 0,
"plot": 1,
"title": 1,
score: { $meta: "searchScore" }
}
}
])
[
{
plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.',
title: 'The Great Race',
score: 29.569732666015625
},
{
plot: 'A wide variety of eccentric competitors participate in a wild and illegal cross-country car race.',
title: 'The Cannonball Run',
score: 25.50379180908203
},
{
plot: 'A mechanic takes his family to a car race and a series of events occur which brings problems, betrayals, violence and the unexpected death of an elderly person.',
title: 'National Mechanics',
score: 21.538257598876953
},
{
plot: "It's time for the annual London to Brighton antique car rally, and Alan McKim and Ambrose Claverhouse are not going to let their friendship stop them from trying to humiliate each other. ...",
title: 'Genevieve',
score: 20.19266128540039
},
{
plot: "A naive drifter runs away from his army father in hopes of making it on the car racing circuit. In Las Vegas, he meets a young scam artist, who develops a crush on him. He is then ...",
title: 'Speedway Junky',
score: 18.639965057373047
}
]

結果に含まれる文書の plot フィールドに次の用語が含まれており、用語間の距離は最大で 5 です。

  • automobilecar、または vehicle は、synonymous_terms コレクションで equivalent のシノニムとして定義されています。

  • racecontest、または rally は、sy``synonymous_terms`` コレクションで explicit シノニムとして定義されています。

Atlas Search では、car race または vehicle race の検索でも同様の結果が返されます。これは、automobilecar、および vehicleequivalent のシノニム(同意語)に設定したためです。ただし、contest または rally をどの用語のシノニムにも設定していないため、automobile contest の結果には race または rally を含むドキュメントは含まれず、automobile rally の結果には race または contest を含むドキュメントは含まれません。

戻る

near