in common-lib/src/main/scala/com/gu/mediaservice/lib/elasticsearch/Mappings.scala [278:357]
def digitalUsageMetadata(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
keywordField("webTitle"),
keywordField("webUrl"),
keywordField("sectionId"),
keywordField("composerUrl")
))
def syndicationUsageMetadata(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
keywordField("partnerName"),
keywordField("syndicatedBy")
))
def frontUsageMetadata(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
keywordField("addedBy"),
keywordField("front")
))
def downloadUsageMetadata(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
keywordField("downloadedBy")
))
def usagesMapping(name: String): NestedField = nestedField(name).copy(properties = Seq(
keywordField("id"),
sStemmerAnalysed("title"),
usageReference("references"),
KeywordField(name = "platform", copyTo = Seq("usagesPlatform")),
keywordField("media"),
KeywordField(name = "status", copyTo = Seq("usagesStatus")),
dateField("dateAdded"),
dateField("dateRemoved"),
dateField("lastModified"),
printUsageMetadata("printUsageMetadata"),
digitalUsageMetadata("digitalUsageMetadata"),
syndicationUsageMetadata("syndicationUsageMetadata"),
frontUsageMetadata("frontUsageMetadata"),
downloadUsageMetadata("downloadUsageMetadata")
))
def leaseMapping(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
keywordField("id"),
keywordField("leasedBy"),
dateField("startDate"),
dateField("endDate"),
keywordField("access"),
keywordField("active"), //TODO should probably not be stored in ES, as its a snapshot in time rather than a calculated field
sStemmerAnalysed("notes"),
keywordField("mediaId"),
dateField("createdAt")
))
def leasesMapping(name: String): ObjectField = nonDynamicObjectField(name).copy(properties = Seq(
leaseMapping("leases"),
dateField("lastModified")
))
def softDeletedMetadataMapping(name: String) = nonDynamicObjectField(name).copy(properties = Seq(
dateField("deleteTime"),
keywordField("deletedBy")
))
private def nonDynamicObjectField(name: String) = ObjectField(name = name, dynamic = Some("strict"))
private def nestedField(name: String) = NestedField(name).dynamic("strict") // ES1 include_in_parent needs to be emulated with field bby field copy_tos
private def dynamicObj(name: String) = objectField(name).copy(dynamic = Some("true"))
private def nonIndexedString(name: String) = textField(name).index(false)
private def sStemmerAnalysed(name: String) = textField(name).analyzer(IndexSettings.englishSStemmerAnalyzerName)
private def hierarchyAnalysed(name: String) = textField(name).analyzer(IndexSettings.hierarchyAnalyserName)
private def standardAnalysed(name: String) = textField(name).analyzer("standard")
private def simpleSuggester(name: String) = completionField(name).analyzer("simple").searchAnalyzer("simple")
//def nonAnalysedList(indexName: String) = Json.obj("type" -> "string", "index" -> "not_analyzed", "index_name" -> indexName)
private def nonAnalysedList(name: String) = {
keywordField(name) // TODO index_name
}