package Ġdev . e vo . elastic magic . compile Ċ Ċ import Ġdev . e vo . elastic magic . Document Ċ import Ġdev . e vo . elastic magic . Elasticsearch Version Ċ import Ġdev . e vo . elastic magic . Meta Fields Ċ import Ġdev . e vo . elastic magic . Params Ċ import Ġdev . e vo . elastic magic . Sub Document Ċ import Ġdev . e vo . elastic magic . Sub Fields Ċ import Ġdev . e vo . elastic magic . merge Documents Ċ import Ġdev . e vo . elastic magic . serde . Std Serializer Ċ Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . maps . should Contain Exactly Ċ import Ġio . kot est . matchers . null s . should Not BeNull Ċ Ċ import Ġkotlin . test . Test Ċ Ċ class ĠMapping Compiler Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġserializer Ġ= Ġobject Ġ: ĠStd Serializer () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġobj ToString ( obj : ĠMap < String , ĠAny ?> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcompiler Ġ= ĠMapping Compiler ( ĊĠĠĠĠĠĠĠ ĠElasticsearch Version ( 6 , Ġ 0 , Ġ 0 ), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty Mapping () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġempty Doc Ġ= Ġobject Ġ: ĠDocument () Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiled Ġ= Ġcompiler . compile ( serializer , Ġempty Doc ) ĊĠĠĠĠĠĠĠ Ġcompiled . body !! Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġempty Map < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sub Fields () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠName Fields < T > Ġ: ĠSub Fields < T >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsort Ġby Ġkeyword ( normal izer Ġ= Ġ" lowercase ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġautocomplete Ġby Ġtext ( analyzer Ġ= Ġ" n gram ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct Doc Ġ= Ġobject Ġ: ĠDocument () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġby Ġtext ( analyzer Ġ= Ġ" standard "). sub Fields (:: Name Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeywords Ġby Ġtext (). sub Fields (:: Name Fields ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiled Ġ= Ġcompiler . compile ( serializer , Ġproduct Doc ) ĊĠĠĠĠĠĠĠ Ġcompiled . body !! Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" analyzer " Ġto Ġ" standard ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fields " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sort " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" keyword ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" normal izer " Ġto Ġ" lowercase ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" autocomplete " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" analyzer " Ġto Ġ" n gram ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" keywords " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fields " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sort " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" keyword ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" normal izer " Ġto Ġ" lowercase ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" autocomplete " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" analyzer " Ġto Ġ" n gram ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sub Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠO pin ion Doc Ġ: ĠSub Document () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġby Ġint () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠCompany Doc Ġ: ĠSub Document () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġby Ġtext ( analyzer Ġ= Ġ" standard ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopinion Ġby Ġobj (:: Op inion Doc , Ġparams Ġ= ĠParams (" enabled " Ġto Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Doc Ġ= Ġobject Ġ: ĠDocument () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Ġby Ġobj (:: Company Doc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopinion Ġby Ġobj (:: Op inion Doc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiled Ġ= Ġcompiler . compile ( serializer , Ġuser Doc ) ĊĠĠĠĠĠĠĠ Ġcompiled . body !! Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" company " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" object ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" analyzer " Ġto Ġ" standard " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" op inion " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" object ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" enabled " Ġto Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" count " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" integer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" op inion " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" object ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" count " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" integer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Merge Documents () Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġclass ĠQ AD oc Ġ: ĠDocument () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoin Ġby Ġjoin ( relations Ġ= Ġmap Of (" question " Ġto ĠlistOf (" answer "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġquestion Doc Ġ= Ġobject Ġ: ĠQ AD oc () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġby Ġint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġby Ġtext () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanswer Doc Ġ= Ġobject Ġ: ĠQ AD oc () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmeta Ġ= Ġquestion Doc . meta ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġby Ġint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġby Ġtext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccepted Ġby Ġboolean () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommon Doc Ġ= Ġmerge Documents ( question Doc , Ġanswer Doc ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompiled Ġ= Ġcompiler . compile ( serializer , Ġcommon Doc ) ĊĠĠĠĠĠĠĠ Ġcompiled . body . should Not BeNull () Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" properties " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" join " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" join ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" relations " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" question " Ġto ĠlistOf (" answer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" integer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" text " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" accepted " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" boolean " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }