Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ

ElasticSearch β€” mapping ΠΈ поиск Π±Π΅Π· ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ²

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим, ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ mapping. НуТСн Π»ΠΈ ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях. Π― ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΅Π³ΠΎ установки, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ хитростями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π² ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ поиска Π½Π° вашСм сайтС.

ВсСм, ΠΊΠΎΠΌΡƒ интСрСсСн соврСмСнный поисковый Π΄Π²ΠΈΠΆΠΎΠΊ ElasticSearch, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±Ρ‰ΠΈΠΌ голосованиС Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° эта Ρ‚Π΅ΠΌΠ°. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρƒ ΠΎΠΏΡΡ‚ΡŒ голосованиС, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ участиС. Π― ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ максимально ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» статСй ΠΏΠΎ ES, Ссли это Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно ΠΏΡƒΠ±Π»ΠΈΠΊΠ΅.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ mapping?

Mapping ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² sql Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, source ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½ΠΈΠΆΠ΅.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ mapping ΠΏΡ€ΠΈ создании индСкса, Ρ‚Π΅ΠΌ самым Π·Π° ΠΎΠ΄ΠΈΠ½ запрос ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для всСх Ρ‚ΠΈΠΏΠΎΠ² Π² индСксС.

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ mapping Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² индСксС:

А ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ mapping сразу для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… индСксов:

Π’Π°ΠΊ Π»ΠΈ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

ES Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ простых случаСв ΠΎΠ½ опрСдСляСт Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Ρ€Π½ΠΎ.
Π’Π°ΠΊ Π·Π°Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ?
Ну Π²ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для чистоты ΠΊΠΎΠ΄Π° ΠΈ увСрСнности Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ хранится Π² индСксС.
ВаТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ mapping это тонкая настройка Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‚.ΠΊ. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ исходник. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ возмоТностСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π”ΡƒΠΌΠ°ΡŽ, всС ΡƒΠΆΠ΅ догадались, ΠΎ Ρ‡Ρ‘ΠΌ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ. Π‘Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² всСго 7: string, integer/long, float/double, boolean, null

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ _source = true ΠΈ вСсь Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ хранится Π² индСксС Π² исходном состояниС ΠΈ возвращаСтся ΠΏΠΎ запросу. И это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² индСксС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ поля, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ваш Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½. Π’ΠΎΠ³Π΄Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ это ΠΏΠΎΠ»Π΅ Π±Π΅Π· вСской Π½Π° Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.

Π’ΠΈΠΏΡ‹ array/object/nested

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ массив для поля, Π½ΠΎ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Π²Π½ΡƒΡ‚Ρ€ΠΈ массива, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Nested(Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ) type

По сути, ΠΌΡ‹ опрСдСляСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π—Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ? ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Если ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ name = blue && count>5 Ρ‚ΠΎ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ сцСнария, стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nested Ρ‚ΠΈΠΏ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π£ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ properties для элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ES сдСлаСт это автоматичСски.
Для поиска ΠΏΠΎ nested Ρ‚ΠΈΠΏΡƒ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nested query ΠΈΠ»ΠΈ nested filter.

Multi-fields

Начиная с вСрсии 1.0 этот прСкрасный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎ всС Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ (ΠΊΡ€ΠΎΠΌΠ΅ nested ΠΈ object).
Π§Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚? Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ настройки ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля.
Π—Π°Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ? Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, поиск Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ‚ΡƒΡˆΠΊΡƒ, Π° Ссли Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π΅ ΠΏΠΎ сырым Π΄Π°Π½Π½Ρ‹ΠΌ, Π° ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ. НапримСр, Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³ послС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Β«Π‘Π°Π½ΠΊΡ‚Β» ΠΈ Β«ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Β» (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ слСгка ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Π½ΠΎ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° сойдёт). Если ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ этому полю, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Β«titleΒ» Π·Π° поиском ΠΈ ΠΊ Β«rawΒ» Π·Π° Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ сортировки.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

НадСюсь, Ρ‡Ρ‚ΠΎ я смог Π΄ΠΎΡ…ΠΎΠ΄Ρ‡ΠΈΠ²ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π³Π»Π°Π²Π½Ρ‹Ρ… функциях mapping’a Π² ES. Если Ρƒ вас Π΅ΡΡ‚ΡŒ вопросы, Ρ€Π°Π΄ Π±ΡƒΠ΄Ρƒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Π΅Ρ€Π½ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ² АлСксСй Аналитик

Big Data Mapping: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ это связано с Data Science, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ часто выполняСтся этот процСсс, Π° Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ инструмСнты ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Big Data mapping.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π³Π΄Π΅ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… систСм свСдСния ΠΎ сСмСйном ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ сотрудника хранятся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Β«1Β» Π² ΠΏΠΎΠ»Π΅ Β«Π΄Π΅Ρ‚ΠΈΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ систСмС эти ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ записаны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ значСния Β«TrueΒ», Π° Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ – словом Β«Π΄Π°Β». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π½Ρ‹Π΅ систСмы для обозначСния ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ отобраТСния. Π§Ρ‚ΠΎΠ±Ρ‹ привСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡŽ, слСдуСт ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ обозначСния ΠΎΠ΄Π½ΠΎΠΉ систСмы обозначСниям Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… источниках, Ρ‚.Π΅. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ мэппинга Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΡ‚ английского map – сопоставлСниС). Π’ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ соотвСтствия Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сСмантиками ΠΈΠ»ΠΈ прСдставлСниями ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ [1].

Дисциплина управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Data Management, Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΊΠ°ΠΊ процСсс создания ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ модСлями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ [2]:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… прСдставляСт собой процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ инструкций ΠΏΠΎ объСдинСнию ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ схСму, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ схСмы Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π½ΠΈΡ… слСдуСт ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, выявив пСрСсСчСниС, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ противорСчия [3].

Π‘ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прилоТСния ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π΄Π°Π½Π½Ρ‹Ρ… [4]:

Π’ Big Data мэппинг выполняСтся ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠ·Π΅Ρ€ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… (Data Lake) ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (DWH, Data Warehouse). Π§Π΅ΠΌ Data Lake отличаСтся ΠΎΡ‚ DWH, рассмотрСно здСсь. Π’ этом случаС ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ рСализуСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ETL-процСсса (Extract, Transform, Load) Π½Π° этапС прСобразования. ΠŸΡ€ΠΈ этом настраиваСтся соотвСтствиС исходных Π΄Π°Π½Π½Ρ‹Ρ… с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ модСлью (рис. 1). Π’ случаС рСляционных Π‘Π£Π‘Π” для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ сущности Π² Ρ€Π°Π·Π½Ρ‹Ρ… прСдставлСниях Π½ΡƒΠΆΠ½ΠΎ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ настройкой ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ (1:1, *:1, 1:* ΠΈΠ»ΠΈ *:*) [5].

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг полСйРис.1. ΠœΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ консолидации Ρ‚Π°Π±Π»ΠΈΡ†

Π’ Data Science ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² этап ΠΈΡ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° выполняСтся Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ датасСта Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ. Π’ частности, ΠΊΠΎΠ³Π΄Π° Data Scientist ΠΎΠ±ΠΎΠ³Π°Ρ‰Π°Π΅Ρ‚ исходный датасСт Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· сторонних источников, ΠΎΠ½ занимаСтся ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄Π°Ρ‚Π° мэппинга ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ автоматичСски с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рассмотрСны Π΄Π°Π»Π΅Π΅.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ процСсса Π΄Π°Ρ‚Π° мэппинга

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒ мэппинга зависит ΠΎΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² [3]:

ΠžΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ процСсс маппирования ΠΌΠΎΠΆΠ½ΠΎ Π·Π° счСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… – свСдСниях ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°Ρ… ΠΈ свойствах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ автоматичСски ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. Π’ частности, Ссли ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡ… стандартизированный рССстр, Ρ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ [2]. Однако Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв процСсс мапирования Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов [4]:

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ 3 основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ [2]:

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ полуавтоматичСскоС ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ конвСртирования схСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° спСциализированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сравниваСт источники Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ схСму для консолидации. Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ провСряСт схСму маппирования ΠΈ вносит исправлСния, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° конвСртирования схСм Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° C++, C # ΠΈΠ»ΠΈ Java для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² систСму ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ (рис. 3) [3].

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг полСйРис. 3. ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ схСм Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС мэппинга

Π”Π°Π»Π΅Π΅ рассмотрим, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ маппирования Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, всС срСдства для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 3 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ [6]:

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ пСрСчислСнных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС 3 ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ: Ρ€ΡƒΡ‡Π½ΠΎΠΉ (GUI ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅), data-driven ΠΈ сСмантичСский. Однако, сСмантичСский мэппинг Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия рССстров ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ имССтся Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ прСдприятии. А ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ рССстры ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅, отраслСвыС ΠΈΠ»ΠΈ городскиС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ [7] Π½Π΅ всСгда Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ построСния локального DWH. Но, наряду с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ государствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ датасСтами, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… DS-Π·Π°Π΄Π°Ρ‡Π°Ρ….

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ инструмСнта для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹:

РСзюмС

Π˜Ρ‚Π°ΠΊ, ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… – это ваТная Ρ‡Π°ΡΡ‚ΡŒ процСсса Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ для Data Scientist’а. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выполняСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π² частности, ΠΏΡ€ΠΈ ΠΎΠ±ΠΎΠ³Π°Ρ‰Π΅Π½ΠΈΠΈ датасСтов. Π’ случаС ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ формирования датасСта ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… источников сопоставлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ самописного Python-скрипта. Однако, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ построСнии ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΈ ΠΎΠ·Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π½Π°Π½ΠΈΠ΅ инструмСнтов Π΄Π°Ρ‚Π° мэппинга пригодится ΠΊΠ°ΠΊ Data Scientist’у, Ρ‚Π°ΠΊ ΠΈ Data Engineer’у. НаконСц, сопоставлСниС Π΄Π°Π½Π½Ρ‹Ρ… с Ρ†Π΅Π»ΡŒΡŽ избавлСния ΠΎΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π΄Π°Ρ‡ΠΈ обСспСчСния качСства Π΄Π°Π½Π½Ρ‹Ρ… (Data Quality) [4]. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Data Quality относится ΠΊ области отвСтствСнности стратСга ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° ΠΏΠΎ качСству Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ процСсса маппирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Data-спСциалисту.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Elasticsearch β€” Π£Ρ€ΠΎΠΊ 3.1 Mapping: схСма Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Маппинг (сопоставлСниС) β€” это процСсс опрСдСлСния схСмы ΠΈΠ»ΠΈ структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Он описываСт свойства ΠΏΠΎΠ»Π΅ΠΉ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Бвойства поля Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, string, integer ΠΈ Ρ‚.Π΄.) ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π²Ρ‹ опрСдСляСтС схСму Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL, Π²Π°ΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ схСму Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Как ΠΌΡ‹ обсуТдали Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΈΠΏ Π² Elasticsearch ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΈΠΏ для Π·Π°ΠΊΠ°Π·ΠΎΠ²). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ схСму. НаличиС Ρ€Π°Π·Π½Ρ‹Ρ… схСм Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ для опрСдСлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Apache Lucene, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ваши Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ понятия Ρ‚ΠΈΠΏΠΎΠ². Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ΅ хранится Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ обрабатываСтся Elasticsearch.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Elasticsearch, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΈΡ… схСму. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅:

ДинамичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Когда Π²Ρ‹ индСксируСтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±Π΅Π· указания сопоставлСния, Elasticsearch автоматичСски опрСдСляСт Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ»Π΅ΠΉ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСскоС сопоставлСниС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ сопоставлСниС Ρ‚ΠΈΠΏΠ° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устанавливаСтся автоматичСски:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ Elasticsearch ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… age ΠΊΠ°ΠΊ числовоС, date_of_birth ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρƒ ΠΈ name ΠΊΠ°ΠΊ строковоС. Когда встрСчаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΎΠ½ пытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΠ»Π΅ логичСским, числовым, тСкстовым ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΠΉ.

БопоставлСниС числовых ΠΈ логичСских ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… являСтся простым, Π½ΠΎ для сопоставлСния ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Ρ‚Ρ‹ сначала провСряСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, соотвСтствуСт Π»ΠΈ ΠΎΠ½ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ извСстным шаблонам Π΄Π°Ρ‚.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ провСряСтся Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π΄Π°Ρ‚, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅:

Π₯отя Elasticsearch ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС извСстныС поля, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… нСоТиданностСй. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ входящих Π² сопоставлСниС, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… опрСдСляСтся Π½Π° основС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ значСния поля. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ сопоставлСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ динамичСскоС сопоставлСниС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ДинамичСская настройка ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… значСния:

Иногда автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Если Π½Π°Ρ‡Π°Π»ΠΎ строкового поля случайно совпадаСт с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π΄Π°Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… поля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π° Π΄Π°Ρ‚Π° вмСсто тСкста. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ схСму, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°.

API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ HTTP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для запроса β€” PUT.

Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° / поля

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ обсудили, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс со схСмой ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ обсудим, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ поля. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ history с Ρ†Π΅Π»ΡŒΡŽ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π·Π°Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° _mapping Π² ΠΊΠΎΠ½Ρ†Π΅ URL-адрСса. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя Ρ‚ΠΈΠΏΠ° history Π² example3 индСкс, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Установив ip_address ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ip, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запросы Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΏΠΎ IP-адрСсу. ΠœΡ‹ обсудим Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ip Π² скором Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы

API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для извлСчСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ схСму ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ индСкса ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ HTTP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для запроса β€” GET.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ содСрТит ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСх Ρ‚ΠΈΠΏΠΎΠ² Π² example3 :

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сопоставлСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ИзмСнСниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы

Π‘Ρ…Π΅ΠΌΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Когда Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ индСксС Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ поля, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅ΠΉ для индСксации ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ поля с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сопоставлСниС. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Reindex API. ΠœΡ‹ обсудим ΠΏΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ Π² 5 ΡƒΡ€ΠΎΠΊΠ΅. Если Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΡƒΠΆΠ΅ индСксированныС Π΄Π°Π½Π½Ρ‹Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΌΠΈΡ€Π΅ SQL Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простым, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ integer, boolean ΠΈ Ρ‚. Π΄. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Elasticsearch прСдставлСны ΠΊΠ°ΠΊ JSON, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ слоТными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, массивы ΠΈ Ρ‚. Π΄.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Geo:

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ΅Ρ‚Π°-полях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.

ΠœΠ΅Ρ‚Π°-поля

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ индСксируСм, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°-поля, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚Π°-поля ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ опрСдСлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

Как ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния

Когда Elasticsearch встрСчаСт Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ JSON Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΎΠ½ΠΎ пропускаСт это ΠΏΠΎΠ»Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ проиндСксировано. Но Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, содСрТащиС Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Elasticsearch Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ null_value Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»Π΅. ЦСлочислСнноС ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся строкой.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Поиск ΠΏΠΎ всСм ΠΏΠΎΠ»Π΅ΠΌ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅

Когда ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ индСксируСтся вмСстС с полями Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Elasticsearch индСксируСт всС значСния ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ΄Π½Ρƒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ строку ( «john jake iphone 2017-02-08» ) Π² качСствС _all поля. Запрос для всСх Π·Π°ΠΊΠ°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат, item_title ΠΊΠ°ΠΊ iphone ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»Π΅ _all Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. Если Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° индСкса Π½Π° дискС:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ части ΡƒΡ€ΠΎΠΊΠ° ΠΌΡ‹ обсудим Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для получСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Nhibernate: Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠ², Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ запросов

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ всю Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я рСгулярно ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ, Ρ€ΠΎΡΡΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ΄Π΅. Π­Ρ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΈ ΠΈ связи Π² NHibernate. Этакая ΡΡ‚Π°Ρ‚ΡŒΡ-памятка Π±ΡƒΠ΄Π΅Ρ‚. Π― Ρ€Π΅ΡˆΠΈΠ» Π΅Ρ‘ слишком сильно Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΏΡ€ΠΎ NHibernate Queries я написал ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ), ΠΈ поэтому Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ссылка Π½Π° ΡΡ‚Π°Ρ‚ΡŒΡŽ (Π½Π° английском), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я опирался, создавая ΡΡ‚Π°Ρ‚ΡŒΡŽ-памятку. НадСюсь, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ Π²Π°ΠΌ.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠ².
1.XML β€” Ρ„Π°ΠΉΠ»Ρ‹

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠ².
ΠŸΠ»ΡŽΡΡ‹:
+ Π•ΡΡ‚ΡŒ мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.
+ ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ способы (Attributes ΠΈ Fluent) сводятся ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ этих xml Ρ„Π°ΠΉΠ»ΠΎΠ².
ΠœΠΈΠ½ΡƒΡΡ‹:
β€” ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ отсутствуСт intellisense(!).
β€” ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ валидация Π²ΠΎ врСмя компиляции.

Ну Ρ‡Ρ‚ΠΎ ΠΆ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Π³ΠΎ.
ПослС установки NHibernate, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ Models->NHibernate Ρ„Π°ΠΉΠ» Nhibernate.cfg.xml

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с SQL Server, поэтому Π²Ρ‹Π±Ρ€Π°Π» SqlClientDriver. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ список NHibernate.Driver’ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚ NHibernate.Driver
Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ мСня SQL Server 2008 стоит, я Π²Ρ‹Π±Ρ€Π°Π» MsSql2008Dialect, всС Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚ SQL Dialects
Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π² SQL Server Π‘Π” NhibernateTutor ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ сами, NHibernate’ΠΎΠΌ.

Π”Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ Models класс Book.cs

(P.S. ВсС Π΅Π³ΠΎ поля Π΄ΠΎΠ»ΠΆΡ‹ Π±Ρ‹Ρ‚ΡŒ virtual – это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для lazy load (Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ) ΠΈ для отслСТивания NHibnerate’ом всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….)

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ создали xml-ΠΌΠ°ΠΏΠΏΠΈΠ½Π³, создадим Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ класс NHibernateHelper.cs.

Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΏΡ€ΠΎ настройку ISessionConfiguration здСсь ISessionFactory Configuration

Π’ ΠΊΠΎΠ½Ρ†Π΅ всСх этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ созданы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹.
Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ

Π”Π°Π²Π°ΠΉΡ‚Π΅ сСйчас посмотрим, ΠΊΠ°ΠΊ NHibernate создаст Π² Π‘Π” Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Book. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅ Controllers класс HomeController ΠΈ напишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Как Π±ΡƒΠ΄Π΅Ρ‚ выглядСт View нас сСйчас Π½Π΅ интСрСсуСт, ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ пустой. ЗапускаСм прилоТСния, Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π‘Π” SQL Server ΠΈ (вуаля!) Π²ΠΈΠ΄ΠΈΠΌ Π² Π‘Π” NhibernateTutor Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Book. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ (nvarchar(255) ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ nvarchar(MAX), Π½ΠΎ Π½Π΅ int!). Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅ настроим связи (ΠΊΠΎΠ³Π΄Π° появится связь ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π»Π΅Ρ‚Π°Ρ‚ΡŒ ошибка ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Mind Π½Π΅ соотвСтсвуСт Ρ‚Π°Π±Π»ΠΈΡ†Π° Book) ΠΈΠ»ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мэппинг ΠΏΠΎΠ»Π΅ΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ настройкС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.

МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ (ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ)

Book.csSeries.cs
Book.hbm.xmlSeries.hbm.xml

Π’Π°ΠΊ, Π½Ρƒ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ? ΠœΡ‹ использовали Ρ‚Π΅Π³ Β«bagΒ» Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас IList, column=Β«Series_idΒ» создаСт Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Book столбСц Series_Id, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅.

Один-ΠΊ-ΠžΠ΄Π½ΠΎΠΌΡƒ

Book.csMind.cs
Book.hbm.xmlMind.hbm.xml

А Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ интСрСсно! constrained=Β«trueΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Book Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Mind, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Id Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Book Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ Id Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Mind. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Book, Π·Π°Π±Ρ‹Π² ΠΏΡ€ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Mind, Ρ‚ΠΎ Nhibernate выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Book ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Mind. ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Mind ΠΎΡ‡Π΅Π½ΡŒ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, поэтому ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Book ΠΏΡ€ΠΈ сохранСнии Ρƒ мСня ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Mind ΠΊΠΎΠ΄ΠΎΠΌ Π½ΠΈΠΆΠ΅, Π° Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Mind я всСгда ΡƒΡΠΏΠ΅ΡŽ.

Cascade = Β«AllΒ» ΠŸΡ€ΠΈ сохранСнии, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Book Ρ‚Π°ΠΊΠΆΠ΅ сохраняСтся, измСняСтся, удаляСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° Mind. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ создали всС связи, ΠΏΠΎΡ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ…, сохранив, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π² ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ² Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΏΠΎΠ΄ спойлСром Π½ΠΈΠΆΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π‘Π”, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² HomeController ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (НСнуТныС участки ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ):

ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ прСдставлСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

2. ΠΠ’Π Π˜Π‘Π£Π’Π«
ЯвляСтся Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ (add-in) ΠΊ Nhibernate.
ΠŸΠ»ΡŽΡΡ‹:
+ НС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (*.hbm.xml), ΠΏΠΈΡˆΠΈΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сразу Π½Π°Π΄ полями класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сущности ΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΈ находятся рядом.
+ ΠŸΠΎΠ΄Π΄Ρ€Π΅ΠΆΠΊΠ° Intellisense 50/50(!). Π•ΡΡ‚ΡŒ подсказки для написания Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Name), Π½ΠΎ Π½Π΅Ρ‚ для Π΅Π³ΠΎ свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдставлСны Π² Π²ΠΈΠ΄Π΅ строки.
+ Π›Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ с xml-Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° Атрибуты.
ΠœΠΈΠ½ΡƒΡΡ‹:
β€” Π£Ρ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.
β€” ΠžΡ‚ΡΡƒΡ‚ΡΠ²ΠΈΠ΅ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π²ΠΎ врСмя компиляции.
β€” Π£ свойств, состоящих ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ 1 Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° слСдуСт ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ индСксы.

Π§Ρ‚ΠΎ слСдуСт Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ? ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ свойством, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΌΠ°ΠΏΠΈΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π’Ρ‚ΠΎΡ€ΠΎΠ΅, Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° индСксы Id(0. ) ΠΈ Generator(1. )? Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ состоят ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ NHMA Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ *.hbm.xml Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° Β«Π»Π΅Ρ‚ΡƒΒ» ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Π²Ρ‹ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ xml-элСмСнты. (К соТалСнию, порядок Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π΅ поддСрТиваСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ reflection).
Π£Π΄Π°Π»ΠΈΠΌ ΠΈΠ· Π‘Π” Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Book (ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, это для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.) Запустим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ Ссли Π² Π‘Π” Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Book, Ρ‚ΠΎ ΠΎΠ½Π° создастся.
ΠŸΡ€ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ синтаксис Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρƒ *.hbm.xml Ρ„Π°ΠΉΠ»ΠΎΠ², СдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ индСксы.

2.1 ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…)
МногиС-ко-многим

Book.csAuthor.cs

МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ

Book.csSeries.cs

Один-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ

Book.csMind.cs

3. Mapping ByCode
ΠŸΠ»ΡŽΡΡ‹:
+ НС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (ΠΊΠ°ΠΊ Π² случаС с Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ)
+ ΠŸΠΎΠ΄Π΄Ρ€Π΅ΠΆΠΊΠ° Intellisense 100(!).
+ НС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ *.hbm.xml-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Nhibernate.cfg.xml
+ Взяли Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρƒ Fluent-Nhibernate, (лямбда-выраТСния) ΠΈ сдСлали синтаксис ΠΏΠΎΠ΄ *.hbm.xml β€” Ρ„Π°ΠΉΠ»Ρ‹.
ΠœΠΈΠ½ΡƒΡΡ‹:
β€” Π£Π±Ρ€Π°Π»ΠΈ Ρƒ cascade Save-Update свойство (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Cascade.Persist, Π½ΠΎ всё-Ρ‚Π°ΠΊΠΈ).
β€” Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° (Π² частности ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами) Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт элСмСнтам *.hbm.xml β€” Ρ„Π°ΠΉΠ»ΠΎΠ².

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ? Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ способом убираСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² для Nhibernate. Π’ xml-Ρ„Π°ΠΉΠ»Π°Ρ… Π±Ρ‹Π»ΠΈ *.hbm.xml Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ nhibernate.cfg.xml Ρ„Π°ΠΉΠ», Π² Attributes стали Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ *.hbm.xml Ρ„Π°ΠΉΠ»Ρ‹, Π² Mapping byCode ΡƒΠΆΠ΅ стал Π½Π΅ Π½ΡƒΠΆΠ΅Π½ nhibernate.cfg.xml. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ±Π΅Ρ€ΡƒΡ‚ Π² Π½ΠΎΠ²ΠΎΠΌ способС (Π΄Π° ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅?).

Класс Book ΠΈ Π΅Π³ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

3.1 ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…)
МногиС-ко-многим

Book.csAuthor.cs
BookMap.csAuthorMap.cs

МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ

Book.csSeries.cs
BookMap.csSeriesMap.cs

Один-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ

Book.csMind.cs
BookMap.csMindMap.cs

4. FLUENT
Он ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ стандартным отобраТСния XML- Ρ„Π°ΠΉΠ»ΠΎΠ² NHibernate. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ XML-Ρ„Π°ΠΉΠ»Ρ‹, Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΈ Π² строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… C# ΠΊΠΎΠ΄Π΅ (Ρ‡Π΅Ρ€Π΅Π· лямбда-выраТСния). Благодаря этому Π΅ΡΡ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ написания ΠΊΠΎΠ΄Π°.
ΠŸΠ»ΡŽΡΡ‹:
+ 100% ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° intellisense!
+ ВСликолСпная докумСнтация Fluent-Nhibernate
+ Валидация Π²ΠΎ врСмя компиляции
+ НС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Nhibernate.cfg.xml, всС настройки, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² NhibernateHelper.
ΠœΠΈΠ½ΡƒΡΡ‹:
β€” По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ вСрсиями NHibernate Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ синтаксис ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°.

Π’ этом NhibernateHelper.cs слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” ΠΌΡ‹ прописываСм здСсь. И Π΄Π°, Ρ‚ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΠ²Π΅ΡŽΡ‚ лямбда-выраТСния.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ класс Book.cs

ΠΈ создадим ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³-класс

Π”Π°Π»Π΅Π΅ создадитС Π² ΠΏΠ°ΠΏΠΊΠ΅ Controllers класс HomeController ΠΈ напишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ View, ΠΈ послС запуска прилоТСния Π² SQL Server Π±ΡƒΠ΄Π΅Ρ‚ создана Ρ‚Π°Π±Π»ΠΈΡ†Π° Book.

4.1 ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…)
МногиС-ко-многим

Book.csAuthor.cs
BookMap.csAuthorMap.cs

МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ

Book.csSeries.cs
BookMap.csSeriesMap.cs

ΠœΠ΅Ρ‚ΠΎΠ΄ References примСняСтся Π½Π° сторонС «МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ», Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС «Один-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ HasMany.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ запросов (NHibernate Queries)

Запрос ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ

Lists with restrictions

Π― Ρ…ΠΎΡ‚Π΅Π» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ запросы ΠΏΠΎ NHibernate Query, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JoinΡ‹, Projecting ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π½ΠΎ оказалось, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ это ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Π΅ΠΉΡˆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ NHibernate Queries ΠΈ NHibernate More Queries

Если Π²Π°ΠΌ интСрСсСн QueryOver, Ρ‚ΠΎ Π²ΠΈΠ΄Ρ‹ Π΅Π³ΠΎ запросов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚ QueryOver in NH3

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ, ΠΈ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΅Ρ‘ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ.

Lazy ΠΈ eager-loading (Β«Π›Π΅Π½ΠΈΠ²Ρ‹Π΅Β» ΠΈ Β«Π–Π°Π΄Π½Ρ‹Π΅Β» Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ)
Lazy loading ΠΈ eager loading β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ NHibernate для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² navigation properties сущности
->Lazyloading β€” лСнивая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ сущности (Book), ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ связанныС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ. Однако, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ navigation property (Book.Genres), связанныС Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ автоматичСски. ΠŸΡ€ΠΈ этом ΠΊ Π±Π°Π·Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ мноТСство запросов: ΠΎΠ΄ΠΈΠ½ для сущности ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

-> Eagerloading β€” Тадная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ сущности. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это сопровоТдаСтся запросом join, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅.

Для Β«ΠΆΠ°Π΄Π½ΠΎΠΉΒ» Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ NHibernate ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Fetch strategies.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим EagerLoading ΠΈ LazyLoading Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Query Over.
—Query Over β€” ΠΊΠΎΠ΄ Lazyloading Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ—

—Query Over β€” ΠΊΠΎΠ΄ EagerLoading Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ—

ΠΊΠ°ΠΊ Π²Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚Π΅, ΠΌΡ‹ Π½Π΅ использовали LeftJoin ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Fetch сразу привязываСт ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Book всС Π΄Π°Π½Π½Ρ‹Π΅.

ΠŸΡ€ΠΎ Fecth β€” ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь Nhibernate Fetch strategy Π° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Ρ‹ с использованиСм lazy ΠΈΠ»ΠΈ eager loading β€” здСсь Аттрибуты lazy, fetch ΠΈ batch-size. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° NhibernateInfo β€” lazy-eager loading

Π‘Ρ‚Π°Ρ‚ΡŒΡ подошла ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ, спасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *