Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

span

項目一覧

  • 定義
  • 構文
  • ターム演算子
  • 構文
  • フィールド
  • 位置演算子
  • contains
  • first
  • near
  • or
  • subtract

注意

span演算子は非推奨です。 代わりに、 フレーズ演算子を使用してください。

span

span演算子は、テキストフィールドのリージョン内に一致するテキスト検索を検索します。 これを使用して、指定された精度で相互に近い文字列を検索できます。 span演算子は、クエリが位置情報を追跡する必要があるため、他の演算子よりも計算が集中しています。

span はタームレベルの演算子であり、 queryフィールドは分析されないことを意味します。 タームレベルの演算子はキーワード アナライザと連携します。 queryフィールドは特殊文字を含む 1 つのタームとして扱われるためです。

span クエリはスコアによってランク付けされません。

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

{
$search: {
"index": <index name>, // optional, defaults to "default"
"span": {
"term" | <positional-operator>": {
<operator-specification>
}
}
}
}

注意

span 検索クエリでは、複合演算子を使用できません。

検索するタームを指定するには、 term演算子を使用します。 term演算子は必須であり、 span 位置演算子とともに使用する場合は、位置演算子の最も遠い子である必要があります。

term演算子の構文は次のとおりです。

"term": {
"path": "<path-to-field>",
"query": "<terms-to-search>"
}

term演算子は次のフィールドを取ります。

オプション
タイプ
必須
説明
path
string
はい
検索するインデックス付きフィールド。
query
string
はい
検索するタームまたはフレーズ。

位置演算子 を使用して、ターム演算子 で検索するタームの位置を指定できます。 位置演算子はdocument型です。 span演算子クエリでは少なくとも 1 つの位置演算子を指定する必要があります。 位置演算子は、他のspan位置演算子を再帰的に受け入れることができます。

注意

例について

このページの例では、 sample_mflix.moviesコレクションを使用しています。 サンプル データをロード defaultし、 映画コレクション に という名前の$search 動的 インデックスを 作成 すると、コレクションに対して次の サンプル クエリを実行できます。サンプル クエリでは、 $limitステージを使用して結果を5ドキュメントに制限し、 $projectステージを使用して結果のtitleフィールドを除くすべてのフィールドを除外します。

span では、次の任意の位置演算子があります。

containsの位置演算子は、他のタームに含まれるタームと一致します。 検索タームを指定するには、位置演算子を再帰的に使用することも、 contains内のターム演算子のみを使用することもできます。

containsの位置演算子は、次の構文をとります。

{
"$search": {
"span": {
"contains": {
"spanToReturn": "inner"|"outer",
"little": { <positional-or-term-operator-specification> },
"big": { <positional-or-term-operator-specification> }
}
}
}
}

位置演算子containsは次のフィールドを取ります。

フィールド
タイプ
必須
説明
big
ドキュメント
はい

再帰的に指定された 1 つ以上の位置演算子、またはターム演算子のみを指定します。 次の表は、 spanToReturnの値に基づいて、 spanbigに対して実行するクエリのタイプを示しています。

outer
span は、 littleのタームを 1 つ以上含むbigのタームと一致します。
inner
span は、 bigからのターム内にあるlittleのタームに一致します。
little
ドキュメント
はい

再帰的に指定された 1 つ以上の位置演算子、またはターム演算子のみを指定します。 次の表は、 spanToReturnの値に基づいて、 spanlittleに対して実行するクエリのタイプを示しています。

inner
span は、 bigからのターム内にあるlittleのタームに一致します。
outer
span は、 littleのタームを 1 つ以上含むbigのタームと一致します。
score
ドキュメント
no
この検索の結果に適用する スコア 。
spanToReturn
string
はい

実行するクエリのタイプと、返される一致する結果のタイプ。 値は次のいずれかになります。

  • inner - クエリで、 bigのターム内にあるlittleのタームに一致するものを実行します

  • outer - littleのタームが少なくとも 1 つ含まれるbigのタームと一致するクエリを実行します

次のクエリの例では、 span.containsを使用して、用語trainが用語greatrobberyとともに表示されるドキュメントを検索します。ここで、 greatrobberyは最大title 5の位置にある可能性があり、 フィールド

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "contains": {
6 "spanToReturn": "outer",
7 "little": {
8 "term": {
9 "path": "title",
10 "query": "train"
11 }
12 },
13 "big": {
14 "near": {
15 "clauses": [
16 {
17 "term": {
18 "path": "title",
19 "query": "great"
20 }
21 },
22 {
23 "term": {
24 "path": "title",
25 "query": "robbery"
26 }
27 }
28 ],
29 "slop": 5
30 }
31 }
32 }
33 }
34 }
35 },
36 {
37 "$limit": 5
38 },
39 {
40 "$project": {
41 "_id": 0,
42 "title": 1
43 }
44 }
45])
[
{ title: 'The Great Train Robbery' },
{ title: 'The Great Train Robbery' },
{ title: "The Great St. Trinian's Train Robbery" }
]

Atlas Search では、 greatrobberyというターム( bigを使用して指定)内にタームtrainlittleを使用して指定)を含むドキュメントが返されます。 を spanToReturn6innerに設定すると、Atlas Search は同じドキュメントを返します。これは、 というターム(train littleを使用して指定)が greatrobbery というターム(big を使用して指定)に出現するため です 。 )。

位置演算子firstは、指定された数値を使用して検索タームの位置を識別します。 検索タームは、位置演算子を使用して再帰的に指定することも、ターム演算子のみを使用することもできます。 spanは、検索タームの位置が指定された数以下のドキュメントに一致します。

firstの位置演算子は、次の構文をとります。

{
"$search": {
"span": {
"first": {
"endPositionLte": <term-position>,
"operator": { <span-positional-or-term-operator-specification> },
"score": { <score-options> }
}
}
}
}

位置演算子firstは次のフィールドを取ります。

オプション
タイプ
必須
説明
endPositionLte
整数
no
検索タームの位置を指定する数値。 複数のタームの検索を指定する場合、最後のタームはこの値以下である必要があります。 省略した場合、デフォルトは3になります。
operator
ドキュメント
はい
位置演算子またはターム演算子のオプションを含むドキュメント。
score
ドキュメント
no
この検索の結果に適用する スコア 。

次のクエリの例では、 span.firstを使用して、指定された string がtitleフィールドに表示されるドキュメントを検索します。 endPositionLteパラメータの値は2です。つまり、 term演算子を使用して指定される検索タームは、 フィールドの最初または 2 番目の単語である必要があります。

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "term": {
9 "path": "title",
10 "query": "dance"
11 }
12 }
13 }
14 }
15 }
16 },
17 {
18 "$limit": 5
19 },
20 {
21 "$project": {
22 "_id": 0,
23 "title": 1
24 }
25 }
26])
[
{ title: 'Dance Program' },
{ title: 'Slam Dance' },
{ title: 'Last Dance' },
{ title: 'War Dance' },
{ title: 'Delhi Dance' }
]

Atlas Search では、 titleフィールドの最初または 2 番目の位置に検索単語danceが含まれるドキュメントが返されます。

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "or": {
9 "clauses": [
10 { "term": { "path": "title", "query": "man" } },
11 { "term": { "path": "title", "query": "woman" } }
12 ]
13 }
14 }
15 }
16 }
17 }
18 },
19 {
20 "$limit": 5
21 },
22 {
23 "$project": {
24 "_id": 0,
25 "title": 1
26 }
27 }
28])
[
{ title: "Everybody's Woman" },
{ title: 'Marked Woman' },
{ title: 'Wonder Man' },
{ title: 'Designing Woman' },
{ title: 'Watermelon Man' }
]

Atlas Search では、 titleフィールドの最初または 2 番目の位置に検索単語manまたはwomanが含まれるドキュメントが返されます。 Atlas Search では、検索タームを指定するためにor演算子clausesが含まれているため、同じtitle内の両方の検索タームは返されません。

nearは、検索タームを含む 2 つ以上の句と一致します。 検索タームは、位置演算子のリストを再帰的に使用することも、ターム演算子のみを使用して指定することもできます。

nearの位置演算子は、次の構文をとります。

{
"$search": {
"span": {
"near": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"slop": <distance-number>,
"inOrder": true|false
}
}
}
}

位置演算子nearは次のフィールドを取ります。

フィールド
タイプ
必須
説明
clauses
ドキュメントの配列
はい
互いに近い必要があるスパン句。 句は空にできません。 各ドキュメントには、 span位置演算子オプションまたは のみ のターム演算子オプションが含まれています。
inOrder
ブール値
no

句内のタームの検索が指定された順序に従い、重複してはなりませんという条件を指定するフラグ。

値は次のいずれかになります。

  • true - 句内の指定された順序で、重複することなくタームを検索します

  • false - 句内の任意の順序でタームを検索します

省略した場合、デフォルトは false になります。

score
ドキュメント
no
この検索の結果に適用する スコア 。
slop
integer
no
句内のターム間の許容距離。 値が低いほどターム間の位置的距離が短くなり、値が大きいとクエリを満たす単語間の距離が長くなります。 デフォルトは0です。つまり、一致と見なされるには、異なる 句内の単語が隣接している必要があります。

次のクエリ例では、 span.nearを使用して、string princepauperが相互に近くで見つかったドキュメントを検索します。 inOrderパラメータはfalseに設定されているため、検索タームは任意の順序で使用できます。 slopパラメータは4に設定されているため、検索タームは最大 4 単語のみで区切ることができます。

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "near": {
6 "clauses": [
7 { "term": { "path": "title", "query": "prince" } },
8 { "term": { "path": "title", "query": "pauper" } }
9 ],
10 "slop": 4,
11 "inOrder": false
12 }
13 }
14 }
15 },
16 {
17 "$limit": 5
18 },
19 {
20 "$project": {
21 "_id": 0,
22 "title": 1
23 }
24 }
25])
[ { title: 'The Prince and the Pauper' } ]

Atlas Search では、検索単語「 prince 」と「 pauper 」を含むドキュメントが 4 単語未満で区切られたドキュメントがtitleフィールドに返されます。

orは、2 つ以上の 句のいずれかに一致します。 検索タームは、位置演算子のリストを再帰的に使用することも、ターム演算子のみを使用して指定することもできます。

orの位置演算子は、次の構文をとります。

{
"$search": {
"span": {
"or": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"score": { <scoring-options> }
}
}
}
}

位置演算子orは次のフィールドを取ります。

オプション
タイプ
必須
説明
clauses
ドキュメントの配列
はい
検索タームを指定する範囲句。 句の 1 つは一致する必要があり、句は空にすることはできません。 各ドキュメントには、再帰的に指定されたspan位置演算子またはターム演算子オプションのみが含まれている必要があります。
score
ドキュメント
no
この検索の結果に適用する スコア 。

次のクエリの例では、 span.or句を使用して、 titleフィールドにcityまたはcountryのいずれかがあるドキュメントを検索する 2タームの演算子クエリを指定します。

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "or": {
6 "clauses": [
7 { "term": { "path": "title", "query": "city" } },
8 { "term": { "path": "title", "query": "country" } }
9 ],
10 }
11 }
12 }
13 },
14 {
15 "$limit": 5
16 },
17 {
18 "$project": {
19 "_id": 0,
20 "title": 1
21 }
22 }
23])
[
{ title: 'Country' },
{ title: 'City Lights' },
{ title: 'King & Country' },
{ title: 'Fat City' },
{ title: 'Atlantic City' }
]

Atlas Search では、検索単語cityまたはcountryを含むドキュメントがtitleフィールドに返されますが、同じtitleには両方とも返されません。

subtractの位置演算子は、別の一致と重複する一致を削除します。 検索タームは、位置演算子のリストを再帰的に使用することも、ターム演算子のみを使用して指定することもできます。 subtract句を使用すると、検索結果から特定の文字列を除外できます。

subtractの位置演算子は、次の構文をとります。

{
"$search": {
"span": {
"subtract": {
"include": { <span-positional-or-term-operator-specification> },
"exclude": { <span-positional-or-term-operator-specification> }
}
}
}
}

位置演算子subtractは次のフィールドを取ります。

オプション
タイプ
必須
説明
exclude
ドキュメント
はい
includeフィールドで指定されたタームまたはフレーズと重複するものを削除するタームまたはフレーズの一致を指定するドキュメント。 任意の 範囲位置演算子ターム演算子を使用して、タームまたはフレーズを指定できます。
include
ドキュメント
はい
任意の位置演算子またはターム演算子のみを使用して、一致するというタームを指定するドキュメント。
score
ドキュメント
no
この検索の結果に適用する スコア 。

次のクエリ例では、 span.subtractを使用して、 titleフィールドにfathersonという単語が含まれているドキュメントを、相互に3単語以内に任意の順序で検索します。 ただし、 fathersonの間に単語likeが出現するドキュメントは除外されます。

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "subtract": {
6 "include": {
7 "near": {
8 "clauses": [
9 { "term": { "path": "title", "query": "father" } },
10 { "term": { "path": "title", "query": "son" } }
11 ],
12 "inOrder": false,
13 "slop": 3
14 }
15 },
16 "exclude": { "term": { "path": "title", "query": "like" } }
17 }
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1
28 }
29 }
30])
[
{ title: 'Father, Son & Holy Cow' },
{ title: 'My Father and My Son' },
{ title: 'Jimmy Rosenberg: The Father, the Son & the Talent' }
]

Atlas SearchLike Father Like Sontitlefathersonlikeexcludeでは次のドキュメントが返されません:クエリを実行します。

戻る

regex