<#escape x as x?xml>
<?xml version="1.0"?>
<component name="org.nuxeo.elasticsearch.defaultConfig">
  <require>org.nuxeo.elasticsearch.ElasticSearchComponent</require>

<#if "${elasticsearch.addressList}" == "">
  <extension target="org.nuxeo.elasticsearch.ElasticSearchComponent"
    point="elasticSearchLocal">
    <elasticSearchLocal
      clusterName="${elasticsearch.clusterName}"
      nodeName="${elasticsearch.nodeName}"
      pathData="${nuxeo.data.dir}/elasticsearch"
      pathLogs="${nuxeo.log.dir}/elasticsearch"
      httpEnabled="${elasticsearch.httpEnabled}"
      networkHost="${elasticsearch.networkHost}" />
  </extension>
<#else>
  <extension target="org.nuxeo.elasticsearch.ElasticSearchComponent"
    point="elasticSearchRemote">
    <elasticSearchRemote
      clusterName="${elasticsearch.clusterName}"
      addressList="${elasticsearch.addressList}"
      clientTransportSniff="false"
      clientTransportIgnoreClusterName="false"
      clientTransportPingTimeout="5s"
      clientTransportNodesSamplerInterval="5s" />
  </extension>
</#if>
<#if (elasticsearch.shield.enabled)?? && "${elasticsearch.shield.enabled}" == "true">
  <extension target="org.nuxeo.elasticsearch.ElasticSearchComponent" point="elasticSearchClientInitialization">
    <clientInitialization class="org.nuxeo.elasticsearch.shield.ShieldInitializationService">
      <username>${elasticsearch.shield.username}</username>
      <password>${elasticsearch.shield.password}</password>
      <#if elasticsearch.shield.keystore.path??>
      <sslKeystorePath>${elasticsearch.shield.keystore.path}</sslKeystorePath>
      </#if>
      <#if elasticsearch.shield.keystore.password??>
      <sslKeystorePassword>${elasticsearch.shield.keystore.password}</sslKeystorePassword>
      </#if>
    </clientInitialization>
</extension>
<#else>
  <extension target="org.nuxeo.elasticsearch.ElasticSearchComponent" point="elasticSearchClientInitialization">
    <clientInitialization class="org.nuxeo.elasticsearch.core.ESClientInitializationServiceImpl"/>
  </extension>
</#if>

  <extension target="org.nuxeo.elasticsearch.ElasticSearchComponent"
    point="elasticSearchIndex">
    <elasticSearchIndex name="${elasticsearch.indexName}" type="doc" repository="default">
      <fetchFromSource>
        <include>ecm:*</include>
        <include>dc:*</include>
        <exclude>ecm:binarytext</exclude>
      </fetchFromSource>

      <settings>
{
<#if "${elasticsearch.addressList}" != "">
   "number_of_shards" : "${elasticsearch.indexNumberOfShards}",
   "number_of_replicas" : "${elasticsearch.indexNumberOfReplicas}",
</#if>
   "analysis" : {
      "filter" : {
         "truncate_filter" : {
            "length" : 256,
            "type" : "truncate"
         },
         "word_delimiter_filter" : {
           "type" : "word_delimiter",
           "preserve_original" : true
         },
         "asciifolding_filter" : {
            "type" : "asciifolding",
            "preserve_original" : true
         },
         "en_stem_filter" : {
            "name" : "minimal_english",
            "type" : "stemmer"
         },
         "en_stop_filter" : {
            "stopwords" : [
               "_english_"
            ],
            "type" : "stop"
         },
         "fr_elision_filter" : {
            "articles" : [
               "c",
               "l",
               "m",
               "t",
               "qu",
               "n",
               "s",
               "j"
            ],
            "type" : "elision"
         },
         "fr_stem_filter" : {
            "name" : "minimal_french",
            "type" : "stemmer"
         },
         "fr_stop_filter" : {
            "stopwords" : [
               "_french_"
            ],
            "type" : "stop"
         }
      },
      "tokenizer" : {
         "path_tokenizer" : {
            "delimiter" : "/",
            "type" : "path_hierarchy"
         }
      },
      "analyzer" : {
         "en_analyzer" : {
            "alias" : "fulltext",
            "char_filter":  [ "html_strip"],
            "filter" : [
               "word_delimiter_filter",
               "lowercase",
               "en_stop_filter",
               "en_stem_filter",
               "asciifolding_filter"
            ],
            "type" : "custom",
            "tokenizer" : "standard"
         },
         "fr_analyzer" : {
            "char_filter":  [ "html_strip"],
            "filter" : [
               "word_delimiter_filter",
               "lowercase",
               "fr_stop_filter",
               "fr_stem_filter",
               "asciifolding_filter",
               "fr_elision_filter"
            ],
            "type" : "custom",
            "tokenizer" : "standard"
         },
         "path_analyzer" : {
            "type" : "custom",
            "tokenizer" : "path_tokenizer"
         },
         "lowercase_analyzer" : {
            "type" : "custom",
            "filter" : [ "truncate_filter", "lowercase", "asciifolding" ],
            "tokenizer" : "keyword"
         },
         "default" : {
            "type" : "custom",
            "filter" : [ "truncate_filter" ],
            "tokenizer" : "keyword"
         }
      }
   }
}
      </settings>
      <mapping>
{
   "_all" : {
      "analyzer" : "fulltext"
   },
   "dynamic_templates": [ {
      "no_thumbnail_template": {
         "path_match": "thumb:thumbnail.*",
         "mapping": {
             "index": "no",
             "include_in_all": false
            }
         }
      }, {
      "no_picture_template": {
         "path_match": "picture:views.*",
         "mapping": {
            "index": "no",
            "include_in_all": false
          }
       }
   } ],
   "properties" : {
      "dc:title" : {
         "type" : "multi_field",
         "fields" : {
           "dc:title" : {
             "type" : "string"
           },
           "fulltext" : {
             "boost": 2,
             "type": "string",
             "analyzer" : "fulltext"
          }
        }
      },
      "dc:description" : {
         "type" : "multi_field",
         "fields" : {
           "dc:description" : {
             "index" : "no",
             "include_in_all" : true,
             "type" : "string"
           },
           "fulltext" : {
             "boost": 1.5,
             "type": "string",
             "analyzer" : "fulltext"
          }
        }
      },
      "note:note" : {
         "type" : "multi_field",
         "fields" : {
           "note:note" : {
             "index" : "no",
             "include_in_all" : true,
             "type" : "string"
           },
           "fulltext" : {
             "type": "string",
             "analyzer" : "fulltext"
          }
        }
      },
      "ecm:binarytext" : {
         "type" : "string",
         "include_in_all" : true,
         "analyzer" : "fulltext"
      },
      "ecm:path" : {
         "type" : "multi_field",
         "fields" : {
            "children" : {
               "analyzer" : "path_analyzer",
               "search_analyzer" : "keyword",
               "type" : "string"
            },
            "ecm:path" : {
               "index" : "not_analyzed",
               "type" : "string"
            }
         }
      },
      "ecm:pos": {
         "type": "integer"
      },
      "dc:created": {
         "format": "dateOptionalTime",
         "type": "date"
      },
      "dc:expired": {
         "format": "dateOptionalTime",
         "type": "date"
      },
      "dc:modified": {
         "format": "dateOptionalTime",
         "type": "date"
      },
      "common:icon": {
         "type": "string",
         "index" : "no",
         "include_in_all" : false
      }
   }
}
      </mapping>

    </elasticSearchIndex>
  </extension>

</component>
</#escape>
