マルチアナライザ
インデックス定義で multi
オブジェクトを使用して、 フィールドもインデックスする代替のアナライザを指定できます。 デフォルトのアナライザに加えて代替のアナライザを使用してフィールドをインデックス化すると、デフォルトまたは代替のアナライザのいずれかを使用してコレクションを検索できます。 このページでは、 multi
を使用してインデックス定義で代替アナライザを指定する方法を説明します。 代替アナライザによる検索の詳細については、「クエリ パスを構築する 」を参照してください。
制限
multi
パス オプションは、 string 型のフィールドでのみ使用できます。
Atlas Search は、 multi
オブジェクトの複数のレイヤーのネストをサポートしていません。
例
次の例は、sample_mflix.movies
コレクション内のフィールドに対するインデックス定義を示しています。コレクションをクラスターにロードすると、Atlas UI の Visual Editor または JSON エディターを使用して、例のインデックスを作成できます。希望する構成方法を選択した後、インデックスを定義するためのデータベースとコレクションを選択します。
単一フィールドの例
次のインデックス定義の例では、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] をクリックします。
次のクエリは、frenchAnalyzer
という名前の代替アナライザーを使用して、string liberte
を検索します。
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
によってインデックス付き string è Nous la Libertè
とクエリ用語 liberte
の両方がベースとなる語 libert
に縮小したため、結果のドキュメントは一致しています。Atlas 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] をクリックします。
次のクエリは、frenchAnalyzer
という名前の代替アナライザーを使用して、title
フィールドと plot
フィールドで revolution
という string に一致するものを検索します。
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 | revolution revolution | revolution revolution |
1985 | Standard Analyzer French Analyzer | revolution revolution | revolution revolution |
2014 | Standard Analyzer French Analyzer | angels , of , revolution angels , of , revolution | revolution revolution |
1970 | Standard Analyzer French Analyzer | start , the , revolution , without , me start , the , revolution , without | revolution revolution |
1989 | Standard Analyzer French Analyzer | la , rèvolution , franèaise revolution , franeais | revolution revolution |
結果の5番目のドキュメントでは、frenchAnalyzer
が title
フィールドの発音区別符号を削除して、ドキュメントをクエリ用語に一致させました。