Elasticsearch: is there a way to declare for all (possibly dynamic) subfields of an object field as string?

后端 未结 1 1909
情深已故
情深已故 2021-01-14 21:12

I have a doc_type with a mapping similar to this very simplified one:

{
   \"test\":{
      \"properties\":{
         \"name\":{
            \"type\":\"strin         


        
1条回答
  •  一整个雨季
    2021-01-14 21:43

    You're almost there.

    First, your dynamic mapping's path must be on clearances.*, and it must be a path_match and not a plain match.

    Here's a runnable example: https://www.found.no/play/gist/df030f005da71827ca96

    export ELASTICSEARCH_ENDPOINT="http://localhost:9200"
    
    # Create indexes
    
    curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{
        "settings": {},
        "mappings": {
            "test": {
                "dynamic_templates": [
                    {
                        "clearances_as_string": {
                            "path_match": "clearances.*",
                            "mapping": {
                                "type": "string",
                                "index": "not_analyzed"
                            }
                        }
                    }
                ]
            }
        }
    }'
    
    
    # Index documents
    curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
    {"index":{"_index":"play","_type":"test"}}
    {"clearances":{"glamis":1234,"cawdor":5678}}
    {"index":{"_index":"play","_type":"test"}}
    {"clearances":{"glamis":"aa2862jsgd","cawdor":"some string"}}
    '
    
    # Do searches
    
    curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d '
    {
        "facets": {
            "cawdor": {
                "terms": {
                    "field": "clearances.cawdor"
                }
            }
        }
    }
    '
    

    0 讨论(0)
提交回复
热议问题