Docs Menu

マルチアナライザ

インデックス定義で multiオブジェクトを使用して、 フィールドもインデックスする代替のアナライザを指定できます。 デフォルトのアナライザに加えて代替のアナライザを使用してフィールドをインデックス化すると、デフォルトまたは代替のアナライザのいずれかを使用してコレクションを検索できます。 このページでは、 multiを使用してインデックス定義で代替アナライザを指定する方法を説明します。 代替アナライザによる検索の詳細については、「クエリ パスを構築する 」を参照してください。

multiパス オプションは、 string 型のフィールドでのみ使用できます。

Atlas Search は、 multiオブジェクトの複数のレイヤーのネストをサポートしていません。

次の例は、sample_mflix.movies コレクション内のフィールドに対するインデックス定義を示しています。コレクションをクラスターにロードすると、Atlas UI の Visual Editor または JSON エディターを使用して、例のインデックスを作成できます。希望する構成方法を選択した後、インデックスを定義するためのデータベースとコレクションを選択します。

次のインデックス定義の例では、title フィールドに standard アナライザーを使用してインデックスを指定します。インデックス定義には、title フィールドの代替アナライザーとして lucene.french アナライザーが指定されており、その名前は frenchAnalyzer です。

  1. [ Refine Your Indexをクリックしてインデックスを構成します。

  2. Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。

  3. Field Nameドロップダウンからtitleを選択します。

  4. [ Data Type String選択されていない場合は選択します。

  5. String Propertiesを展開し、次の変更を加えます。

    インデックスアナライザ

    まだ選択されていない場合は、ドロップダウンから [ lucene.standard ] を選択します。

    searchAnalyzer

    まだ選択されていない場合は、ドロップダウンから [ lucene.standard ] を選択します。

    インデックス オプション

    デフォルトのoffsetsを使用します。

    Store

    デフォルトのtrueを使用します。

    上記を無視

    デフォルト設定のままにしてください。

    基準

    デフォルトのincludeを使用します。

  6. [ Add Multi Fieldをクリックして、 titleフィールドに別のアナライザを構成します。

  7. Multi Field NameフィールドにfrenchAnalyzerと入力します。

  8. Multi Field Propertiesに次の変更を加えます。

    インデックスアナライザ

    まだ選択されていない場合は、ドロップダウンから [ lucene.french ] を選択します。

    searchAnalyzer

    まだ選択されていない場合は、ドロップダウンから [ lucene.french ] を選択します。

    インデックス オプション

    デフォルトのoffsetsを使用します。

    Store

    デフォルトのtrueを使用します。

    上記を無視

    デフォルト設定のままにしてください。

    基準

    デフォルトのincludeを使用します。

  9. [Add] をクリックします。

  10. [Save Changes] をクリックします。

  11. [Create Search Index] をクリックします。

  1. デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

    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}
  2. [Next] をクリックします。

  3. [Create Search Index] をクリックします。

次のクエリは、frenchAnalyzer という名前の代替アナライザーを使用して、string liberte を検索します。

1db.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
クエリトークン

標準アナライザ

è, nous, la, libertè

libertè

フランス語アナライザー

è, libert

libert

次のインデックス定義の例では、title フィールドと plot フィールドに対して standard アナライザーを使用したインデックスを指定します。インデックス定義では、titleフィールドとplotフィールドの代替アナライザーとして lucene.french も指定されています。

  1. インデックスを設定するには、 Refine Your Indexをクリックします。

  2. Field Mappingsセクションで、 Add FieldをクリックしてAdd Field Mappingウィンドウを開きます。

  3. Field Nameドロップダウンからtitleを選択します。

  4. [ Data Type String選択されていない場合は選択します。

  5. String Propertiesを展開し、次の変更を加えます。

    インデックスアナライザ

    まだ選択されていない場合は、ドロップダウンから [ lucene.standard ] を選択します。

    searchAnalyzer

    まだ選択されていない場合は、ドロップダウンから [ lucene.standard ] を選択します。

    インデックス オプション

    デフォルトのoffsetsを使用します。

    Store

    デフォルトのtrueを使用します。

    上記を無視

    デフォルト設定のままにしてください。

    基準

    デフォルトのincludeを使用します。

  6. [ Add Multi Fieldをクリックして、 titleフィールドに別のアナライザを構成します。

  7. Multi Field NameフィールドにfrenchAnalyzerと入力します。

  8. Multi Field Propertiesに次の変更を加えます。

    インデックスアナライザ

    まだ選択されていない場合は、ドロップダウンから [ lucene.french ] を選択します。

    searchAnalyzer

    まだ選択されていない場合は、ドロップダウンから [ lucene.french ] を選択します。

    インデックス オプション

    デフォルトのoffsetsを使用します。

    Store

    デフォルトのtrueを使用します。

    上記を無視

    デフォルト設定のままにしてください。

    基準

    デフォルトのincludeを使用します。

  9. [Add] をクリックします。

  10. Add Field MappingをクリックするとAdd Field Mappingウィンドウが開きます。

  11. Field Nameドロップダウンからplotを選択します。

  12. 4 から 9 までのステップを繰り返します。

  13. [Save Changes] をクリックします。

  14. [Create Search Index] をクリックします。

  1. デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

    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}
  2. [Next] をクリックします。

  3. [Create Search Index] をクリックします。

次のクエリは、frenchAnalyzer という名前の代替アナライザーを使用して、title フィールドと plot フィールドで revolution という string に一致するものを検索します。

1db.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番目のドキュメントでは、frenchAnalyzertitle フィールドの発音区別符号を削除して、ドキュメントをクエリ用語に一致させました。