在Elasticsearch中,如何使用自动映射的索引并且不分析所有字段?

时间:2016-04-28 15:18:55

标签: elasticsearch

我试着这样做:

PUT /index_name/

{ "index" : {
        "analysis" : {
            "analyzer" :"not_analyzed"            
       }
    }
}

但我不确定这是正确的方式......

编辑:

我从答案中应用了两种方法。但我无法测试它。如果实际上它确实

 GET /index_name/_mapping
...
  "metaData_requestHeaders_accept-language": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_akamai-origin-hop": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_alexatoolbar-alx_ns_ph": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_authorization": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_c": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_cache-control": {
                        "type": "string"
                    },
                    "metaData_requestHeaders_ckiooe": {
                        "type": "string"
                    },
...

如您所见,自动映射未显示使用的分析器。所以我无法测试这实际上是否有效。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用Dynamic Templates之类的:

PUT my_index
{
"mappings": {
  "my_type": {
     "dynamic_templates": [
        {
           "strings": {
              "match_mapping_type": "string",
              "mapping": {
                 "type": "string",
                 "index": "not_analyzed"
              }
             }
          }
       ]
     }
   }
  }

应用上述模板后,您应该会看到以下内容:

GET /my_index/_mapping

{
"my_index": {
  "mappings": {
     "my_type": {
        "dynamic_templates": [
           {
              "strings": {
                 "mapping": {
                    "index": "not_analyzed",
                    "type": "string"
                 },
                 "match_mapping_type": "string"
              }
           }
        ],
        "properties": {}
      }
    }
  }
 }

上面的映射表明默认情况下所有字符串都是not_analyzed

答案 1 :(得分:0)

我猜你正在寻找的是Elasticsearch Templates,它允许你动态创建映射。

你想要这样的东西:

PUT index_name
{
  "mappings": {
    "type_name": {
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "fields": {
                "raw": {
                  "type":  "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      ]
    }
  }
}