言語アナライザ
言語固有のアナライザ を使用して、特定の言語にカスタマイズされたインデックスを作成します。 各言語アナライザには、その言語の使用パターンに基づくストップワードと単語の除算が組み込まれています。
Atlas Search は、次の言語アナライザを提供します。
lucene.arabic | lucene.armenian | lucene.basque | lucene.bengali |
lucene.brazilian | lucene.bulgarian | lucene.catalan | lucene.chinese |
lucene.cjk 1 | lucene.czech | lucene.danish | lucene.dutch |
lucene.english | lucene.finnish | lucene.french | lucene.galician |
lucene.german | lucene.greek | lucene.hindi | lucene.hungarian |
lucene.indonesian | lucene.irish | lucene.italian | lucene.japanese |
lucene.korean | lucene.kuromoji 2 | lucene.latvian | lucene.lithuanian |
lucene.morfologik 3 | lucene.nori 4 | lucene.norwegian | lucene.persian |
lucene.polish | lucene.portuguese | lucene.romanian | lucene.russian |
lucene.smartcn 5 | lucene.sorani | lucene.spanish | lucene.swedish |
lucene.thai | lucene.turkish | lucene.ukrainian |
1 cjk
は、一般的な中国語、日本語、大文字と小文字のアナライザです
2 kuromoji
は、日本語のアナライザです
3 morfologik
は、ポーランド語アナライザです
4 nori
は、 韓国語アナライザ
5 smartcn
は中国語アナライザです
例
次のドキュメントを含むcars
という名前のコレクションについて考えてみます。
{ "_id": 1, "subject": { "en": "It is better to equip our cars to understand the causes of the accident.", "fr": "Mieux équiper nos voitures pour comprendre les causes d'un accident.", "he": "עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה." } }
{ "_id": 2, "subject": { "en": "The best time to do this is immediately after you've filled up with fuel", "fr": "Le meilleur moment pour le faire c'est immédiatement après que vous aurez fait le plein de carburant.", "he": "הזמן הטוב ביותר לעשות זאת הוא מיד לאחר שמילאת דלק." } }
組み込み言語アナライザの例
次のインデックス定義の例では、 french
アナライザを使用してsubject.fr
フィールドのインデックスを指定します。
{ "mappings": { "fields": { "subject": { "fields": { "fr": { "analyzer": "lucene.french", "type": "string" } }, "type": "document" } } } }
次のクエリは、 subject.fr
フィールドで string pour
を検索します。
db.cars.aggregate([ { $search: { "text": { "query": "pour", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
上記のクエリでは、 french
アナライザを使用しても結果が返されません。 pour
は組み込みのストップワードであるためです。 standard
アナライザを使用すると、同じクエリで両方のドキュメントが返されます。
次のクエリは、 subject.fr
フィールドで string carburant
を検索します。
db.cars.aggregate([ { $search: { "text": { "query": "carburant", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
{ subject: { fr: "Le meilleur moment pour le faire c'est immédiatement après que vous aurez fait le plein de carburant." } }
Atlas Search では、クエリがlucene.french
アナライザがドキュメント用に作成したトークンと一致したため、結果に_id: 1
を含むドキュメントが返されます。 lucene.french
アナライザは、 _id: 1
を使用してドキュメントのsubject.fr
フィールドに対して次のトークンを作成します。
meileu | moment | fair |
est | imediat | aprè |
fait | plein | carburant |
カスタム言語アナライザの例
また、 icuフォールディング と ストップワード トークン フィルターを使用して カスタムアナライザ を作成し、サポートされていない言語のインデックスを作成することもできます。
次のインデックス定義の例では、 myHebrewAnalyzer
というカスタムアナライザを使用してヘブライ テキストのトークンを分析および作成し、 subject.he
フィールドのインデックスを指定します。
{ "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "subject": { "fields": { "he": { "analyzer": "myHebrewAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "myHebrewAnalyzer", "tokenFilters": [ { "type": "icuFolding" }, { "tokens": [ "אן", "שלנו", "זה", "אל" ], "type": "stopword" } ], "tokenizer": { "type": "standard" } } ] }
次のクエリは、 subject.he
フィールドで string המכוניות
を検索します。
db.cars.aggregate([ { $search: { "text": { "query": "המכוניות", "path": "subject.he" } } }, { $project: { "_id": 0, "subject.he": 1 } } ])
{ subject: { he: 'עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה.' } }
Atlas Search では、クエリがmyHebrewAnalyzer
アナライザがドキュメント用に作成したトークンと一致したため、結果に_id: 1
を含むドキュメントが返されます。 myHebrewAnalyzer
アナライザは、 _id: 1
を使用してドキュメントのsubject.he
フィールドに対して次のトークンを作成します。
עדיף | לצייד | את |
המכוניות | כדי | להבין |
את | הגורמים | לתאונה |