インデックス定義で multi オブジェクトを使用して、フィールドのインデックスを作成する代替アナライザを指定できます。デフォルトのアナライザに加えて代替アナライザでフィールドにインデックスを付けると、デフォルトまたは代替アナライザのどちらかでコレクションを検索できます。このページでは、multi を使用して インデックス定義に代替アナライザを指定する方法を示します。
マルチアナライザの制限
multiパス オプションは、 string 型のフィールドでのみ使用できます。
MongoDB Search は、multi オブジェクトの複数のレイヤーをネストすることをサポートしていません。
例
次の例は、sample_mflix.moviesコレクション内のフィールドのインデックス定義を示しています。コレクションをクラスターにロードすると、ビジュアル エディターまたは Atlas UIの JSONエディター、または mongosh を使用して例インデックスを作成できます。
➤ 言語を選択 ドロップダウン メニューを使用して、このページの例のインターフェイスを設定します。
単一フィールドの例
次のインデックス定義の例では、title フィールドに standard アナライザーを使用してインデックスを指定します。インデックス定義には、title フィールドの代替アナライザーとして lucene.french アナライザーが指定されており、その名前は frenchAnalyzer です。
[ Refine Your Indexをクリックしてインデックスを構成します。
Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。
Field Nameドロップダウンから
titleを選択します。[ Data Type String選択されていない場合は選択します。
String Propertiesを展開し、次の変更を加えます。
インデックスアナライザ
まだ選択されていない場合は、ドロップダウンから [
lucene.standard] を選択します。searchAnalyzer
まだ選択されていない場合は、ドロップダウンから [
lucene.standard] を選択します。インデックス オプション
デフォルトの
offsetsを使用します。Store
デフォルトの
trueを使用します。上記を無視
デフォルト設定のままにしてください。
基準
デフォルトの
includeを使用します。[ Add Multi Fieldをクリックして、
titleフィールドに別のアナライザを構成します。Multi Field Nameフィールドに
frenchAnalyzerと入力します。Multi Field Propertiesに次の変更を加えます。
インデックスアナライザ
まだ選択されていない場合は、ドロップダウンから [
lucene.french] を選択します。searchAnalyzer
まだ選択されていない場合は、ドロップダウンから [
lucene.french] を選択します。インデックス オプション
デフォルトの
offsetsを使用します。Store
デフォルトの
trueを使用します。上記を無視
デフォルト設定のままにしてください。
基準
デフォルトの
includeを使用します。[Add] をクリックします。
[Save Changes] をクリックします。
[Create Search Index] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": { 6 "type": "string", 7 "analyzer": "lucene.standard", 8 "multi": { 9 "frenchAnalyzer": { 10 "type": "string", 11 "analyzer": "lucene.french" 12 } 13 } 14 } 15 } 16 } 17 } [Next] をクリックします。
[Create Search Index] をクリックします。
1 db.movies.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "title": { 8 "type": "string", 9 "analyzer": "lucene.standard", 10 "multi": { 11 "frenchAnalyzer": { 12 "type": "string", 13 "analyzer": "lucene.french" 14 } 15 } 16 } 17 } 18 } 19 } 20 )
次のクエリは、frenchAnalyzer という名前の代替アナライザーを使用して、string liberte を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
[ { "$search": { "text": { "query": "liberte", "path": { "value": "title", "multi": "frenchAnalyzer" } } } } ] SCORE: 4.9305267333984375 _id: "573a1392f29313caabcd9950" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-08-21 00:02:36.330000000" num_mflix_comments: 1 plot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…" poster: "https://m.media-amazon.com/images/M/MV5BODg0ODAzNTItM2M4ZC00NGYxLWIzMm…" rated: "APPROVED" released: 1931-12-31T00:00:00.000+00:00 runtime: 97 title: "è Nous la Libertè" tomatoes: Object type: "movie" writers: Array (1) year: 1931
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "liberte", 6 "path": { "value": "title", "multi": "frenchAnalyzer" } 7 } 8 } 9 }, 10 { 11 "$project": { 12 "title": 1, 13 "year": 1, 14 "_id": 0 15 } 16 } 17 ])
[ { title: 'è Nous la Libertè', year: 1931 } ]
結果のドキュメントは、frenchAnalyzer がインデックス文字列 è Nous la Libertè とタームliberte の両方を基本単語 libert に縮小したため、一致します。 MongoDB Search では、発音区別記号が削除されないため、 standardアナライザを使用した検索ではこのドキュメントが返されません。各アナライザは、インデックスとクエリに対して次のトークン(検索可能なターム)を生成します。
analyzer | Index Tokens | クエリトークン |
|---|---|---|
標準アナライザ |
|
|
フランス語アナライザー |
|
|
複数フィールドの例
次のインデックス定義の例では、title フィールドと plot フィールドに対して standard アナライザーを使用したインデックスを指定します。インデックス定義では、titleフィールドとplotフィールドの代替アナライザーとして lucene.french も指定されています。
インデックスを設定するには、 Refine Your Indexをクリックします。
Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。
Field Nameドロップダウンから
titleを選択します。[ Data Type String選択されていない場合は選択します。
String Propertiesを展開し、次の変更を加えます。
インデックスアナライザ
まだ選択されていない場合は、ドロップダウンから [
lucene.standard] を選択します。searchAnalyzer
まだ選択されていない場合は、ドロップダウンから [
lucene.standard] を選択します。インデックス オプション
デフォルトの
offsetsを使用します。Store
デフォルトの
trueを使用します。上記を無視
デフォルト設定のままにしてください。
基準
デフォルトの
includeを使用します。[ Add Multi Fieldをクリックして、
titleフィールドに別のアナライザを構成します。Multi Field Nameフィールドに
frenchAnalyzerと入力します。Multi Field Propertiesに次の変更を加えます。
インデックスアナライザ
まだ選択されていない場合は、ドロップダウンから [
lucene.french] を選択します。searchAnalyzer
まだ選択されていない場合は、ドロップダウンから [
lucene.french] を選択します。インデックス オプション
デフォルトの
offsetsを使用します。Store
デフォルトの
trueを使用します。上記を無視
デフォルト設定のままにしてください。
基準
デフォルトの
includeを使用します。[Add] をクリックします。
Add Field MappingをクリックするとAdd Field Mappingウィンドウが開きます。
Field Nameドロップダウンから
plotを選択します。4 から 9 までのステップを繰り返します。
[Save Changes] をクリックします。
[Create Search Index] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": { 6 "type": "string", 7 "analyzer": "lucene.standard", 8 "multi": { 9 "frenchAnalyzer": { 10 "type": "string", 11 "analyzer": "lucene.french" 12 } 13 } 14 }, 15 "plot": { 16 "type": "string", 17 "analyzer": "lucene.standard", 18 "multi": { 19 "frenchAnalyzer": { 20 "type": "string", 21 "analyzer": "lucene.french" 22 } 23 } 24 } 25 } 26 } 27 } [Next] をクリックします。
[Create Search Index] をクリックします。
1 db.movies.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "title": { 8 "type": "string", 9 "analyzer": "lucene.standard", 10 "multi": { 11 "frenchAnalyzer": { 12 "type": "string", 13 "analyzer": "lucene.french" 14 } 15 } 16 }, 17 "plot": { 18 "type": "string", 19 "analyzer": "lucene.standard", 20 "multi": { 21 "frenchAnalyzer": { 22 "type": "string", 23 "analyzer": "lucene.french" 24 } 25 } 26 } 27 } 28 } 29 } 30 )
次のクエリは、frenchAnalyzer という名前の代替アナライザーを使用して、title フィールドと plot フィールドで revolution という string に一致するものを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
[ { "$search": { "text": { "query": "revolution", "path": [ "title", "plot", { "value": "title", "multi": "frenchAnalyzer" }, { "value": "plot", "multi": "frenchAnalyzer" } ] } } } ] SCORE: 14.07243537902832 _id: "573a13dbf29313caabdaf845" awards: Object cast: Array (4) countries: Array (11) directors: Array (1) fullplot: "REVOLUTION is a film about changing the world, going for it, taking a …" genres: Array (3) imdb: Object languages: Array (1) lastupdated: "2015-07-09 11:14:18.300000000" metacritic: 53 num_mflix_comments: 0 plot: "REVOLUTION is a film about changing the world, going for it, taking a …" poster: "https://m.media-amazon.com/images/M/MV5BMTc1NDIxNjc0N15BMl5BanBnXkFtZT…" rated: "PG" released: 2015-04-22T00:00:00.000+00:00 runtime: 85 title: "Revolution" tomatoes: Object type: "movie" writers: Array (1) year: 2012 SCORE: 13.935744285583496 _id: "573a1398f29313caabce9ae2" awards: Object cast: Array (4) countries: Array (2) directors: Array (1) fullplot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…" genres: Array (3) imdb: Object languages: Array (1) lastupdated: "2015-08-14 00:46:28.990000000" num_mflix_comments: 1 plot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…" poster: "https://m.media-amazon.com/images/M/MV5BZmZhMmEyNjktZTgxZC00NzQyLTkyZD…" rated: "PG-13" released: 1985-12-25T00:00:00.000+00:00 runtime: 126 title: "Revolution" type: "movie" writers: Array (1) year: 1985 SCORE: 11.623137474060059 _id: "573a13f5f29313caabde37d4" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Together with five Soviet avant-garde artists, hero of the Russian rev…" genres: Array (1) imdb: Object languages: Array (1) lastupdated: "2015-09-15 03:33:53.177000000" num_mflix_comments: 1 plot: "Together with five Soviet avant-garde artists, hero of the Russian rev…" released: 2014-11-18T00:00:00.000+00:00 runtime: 113 title: "Angels of Revolution" type: "movie" writers: Array (3) year: 2014 SCORE: 11.210482597351074 _id: "573a1396f29313caabce4248" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "An account of the adventures of two sets of identical twins, badly scr…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-09-05 00:50:08.277000000" num_mflix_comments: 0 plot: "Two mismatched sets of identical twins - one aristocrat, one peasant -…" poster: "https://m.media-amazon.com/images/M/MV5BODM2MzE3NmMtNmE2ZS00OGI2LWI5NT…" rated: "M" released: 1970-08-14T00:00:00.000+00:00 runtime: 90 title: "Start the Revolution Without Me" tomatoes: Object type: "movie" writers: Array (2) year: 1970 SCORE: 8.332647323608398 _id: "573a1398f29313caabceba10" awards: Object cast: Array (4) countries: Array (5) directors: Array (2) fullplot: "A history of the French Revolution from the decision of the king to co…" genres: Array (3) imdb: Object languages: Array (2) lastupdated: "2015-09-05 00:30:36.643000000" num_mflix_comments: 0 plot: "A history of the French Revolution from the decision of the king to co…" released: 1989-10-25T00:00:00.000+00:00 runtime: 360 title: "La rèvolution franèaise" tomatoes: Object type: "movie" writers: Array (5) year: 1989 SCORE: 7.699893474578857 _id: "573a13a4f29313caabd10215" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) genres: Array (1) imdb: Object languages: Array (1) lastupdated: "2015-09-10 17:19:25.853000000" metacritic: 63 num_mflix_comments: 0 poster: "https://m.media-amazon.com/images/M/MV5BMTkxOTUzNjg0Ml5BMl5BanBnXkFtZT…" released: 2001-04-22T00:00:00.000+00:00 runtime: 90 title: "Revolution #9" tomatoes: Object type: "movie" writers: Array (1) year: 2001 SCORE: 6.8415961265563965 _id: "573a13a0f29313caabd05edb" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Friendship and betrayal between two poets during the French Revolution…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-04-17 01:56:58.940000000" metacritic: 60 num_mflix_comments: 0 plot: "Friendship and betrayal between two poets during the French Revolution…" poster: "https://m.media-amazon.com/images/M/MV5BMTQ0Nzc0OTkwM15BMl5BanBnXkFtZT…" rated: "PG-13" released: 2001-04-18T00:00:00.000+00:00 runtime: 124 title: "Pandaemonium" tomatoes: Object type: "movie" writers: Array (1) year: 2000 SCORE: 6.7074995040893555 _id: "573a1397f29313caabce8972" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Set ten years after the most peaceful revolution in United States hist…" genres: Array (3) imdb: Object languages: Array (1) lastupdated: "2015-09-10 17:14:53.427000000" num_mflix_comments: 1 plot: "Set ten years after the most peaceful revolution in United States hist…" poster: "https://m.media-amazon.com/images/M/MV5BYTE5MGNhN2QtMTNhYy00MDQ1LTgzOT…" released: 1983-11-03T00:00:00.000+00:00 runtime: 80 title: "Born in Flames" tomatoes: Object type: "movie" writers: Array (2) year: 1983 SCORE: 6.615457057952881 _id: "573a1395f29313caabce1c90" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "The study of a youth on the edge of adulthood and his aunt, ten years …" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-08-21 00:16:07.580000000" num_mflix_comments: 0 plot: "The study of a youth on the edge of adulthood and his aunt, ten years …" poster: "https://m.media-amazon.com/images/M/MV5BMmJjOGRjNWMtOGE5Ni00YzYwLThkM2…" released: 1964-05-12T00:00:00.000+00:00 runtime: 105 title: "Before the Revolution" tomatoes: Object type: "movie" writers: Array (2) year: 1964 SCORE: 6.615457057952881 _id: "573a13cef29313caabd86ecc" awards: Object cast: Array (1) countries: Array (1) directors: Array (1) fullplot: "Through intimate interviews, provocative art, and rare, historical fil…" genres: Array (1) imdb: Object languages: Array (1) lastupdated: "2015-04-02 00:54:39.997000000" metacritic: 70 num_mflix_comments: 1 plot: "Through intimate interviews, provocative art, and rare, historical fil…" poster: "https://m.media-amazon.com/images/M/MV5BMjE1MDU1MDA2Nl5BMl5BanBnXkFtZT…" released: 2011-06-01T00:00:00.000+00:00 runtime: 83 title: "!Women Art Revolution" tomatoes: Object type: "movie" year: 2010
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "revolution", 6 "path": ["title", "plot", 7 { "value": "title", "multi": "frenchAnalyzer" }, 8 { "value": "plot", "multi": "frenchAnalyzer" } 9 ] 10 } 11 } 12 }, 13 { 14 "$limit": 5 15 }, 16 { 17 "$project": { 18 "title": 1, 19 "plot": 1, 20 "year": 1, 21 "_id": 0 22 } 23 } 24 ])
[ { year: 2012, plot: 'REVOLUTION is a film about changing the world, going for it, taking a stand, and fighting for something. A true-life adventure following Director, Rob Stewart (SHARKWATER) over four years ...', title: 'Revolution' }, { plot: 'New York trapper Tom Dobb becomes an unwilling participant in the American Revolution after his son Ned is drafted into the Army by the villainous Sergeant Major Peasy. Tom attempts to find...', title: 'Revolution', year: 1985 }, { plot: "Together with five Soviet avant-garde artists, hero of the Russian revolution Polina Schneider travels to Siberia to 'civilize' the native Khanty and Nenets tribes, for whom interaction ...", title: 'Angels of Revolution', year: 2014 }, { plot: 'Two mismatched sets of identical twins - one aristocrat, one peasant - mistakenly exchange identities on the eve of the French Revolution.', title: 'Start the Revolution Without Me', year: 1970 }, { plot: "A history of the French Revolution from the decision of the king to convene the Etats-Generaux in 1789 in order to deal with France's debt problem. The first part of the movie tells the ...", title: 'La rèvolution franèaise', year: 1989 } ]
結果に含まれるドキュメントには、title フィールドと plot フィールドの両方にクエリ用語が含まれています。各アナライザーは、結果内の各ドキュメントの title フィールドに対して、次のトークン(検索可能な用語)を生成します。
年 | analyzer | Index Tokens | クエリトークン |
2012 | Standard Analyzer French Analyzer | revolutionrevolution | revolutionrevolution |
1985 | Standard Analyzer French Analyzer | revolutionrevolution | revolutionrevolution |
2014 | Standard Analyzer French Analyzer | angels, of, revolutionangels, of, revolution | revolutionrevolution |
1970 | Standard Analyzer French Analyzer | start, the, revolution, without, mestart, the, revolution, without | revolutionrevolution |
1989 | Standard Analyzer French Analyzer | la, rèvolution, franèaiserevolution, franeais | revolutionrevolution |
結果の5番目のドキュメントでは、frenchAnalyzer が title フィールドの発音区別符号を削除して、ドキュメントをクエリ用語に一致させました。