更新到elasticsearch索引

时间:2015-09-16 21:09:13

标签: elasticsearch

此处新增弹性搜索并调试现有索引。我正在基于搜索创建仪表板,发现正在发送的某些字段不会作为过滤选项出现。我进一步检查了这一点,发现有些字段没有编入索引。创建索引的人声称对索引的字段没有限制但我不同意找到以下内容:

     "customerid": {
              "type": "string",
              "norms": {
                 "enabled": false
              },
              "fields": {
                 "raw": {
                    "type": "string",
                    "index": "not_analyzed",
                    "ignore_above": 256
                 }
              }
           },

它显示的值为not_analyzed。我想更新此值,以便我需要的字段被索引并可用于仪表板中的可视化。我知道索引名称,但数据本身和映射属于类型。所以不知道该怎么做。在查看elasticsearch插件/头部时,我没有看到索引。

"customer_index": {
        "dynamic_templates": [
           {
              "string_fields": {
                 "mapping": {
                    "index": "analyzed",
                    "omit_norms": true,
                    "type": "multi_field",
                    "fields": {

除了所有相关字段的初始标题外。任何建议或帮助将不胜感激。

编辑:

正如Alain正确指出的那样,我对未分析的误解。我仍然感到困惑,并希望添加一些额外的信息将有助于诊断此问题。

首先,这是一个kibana视图,显示包含数据的特定索引,可用字段:

Available Fields
   @timestamp
   _id
   _type
   etc.

客户ID不是其中之一。现在有不同的数据源来到同一个索引,例如:

job records
customer records
project records 

这由_type字段定义。现在我想访问客户记录对象,它有自己的属性:

customer_index": {
        "dynamic_templates": [
           {
              "string_fields": {
                 "mapping": {
                    "index": "analyzed",
                    "omit_norms": true,
                    "type": "multi_field",
                    "fields": {
                       "{name}": {
                          "index": "analyzed",
                          "omit_norms": true,
                          "type": "string"
                       },
                       "raw": {
                          "ignore_above": 256,
                          "index": "not_analyzed",
                          "type": "string"
                       }
                    }
                 },
                 "match": "*",
                 "match_mapping_type": "string"
              }
           },
           {
              "message_field": {
                 "mapping": {
                    "index": "analyzed",
                    "omit_norms": true,
                    "type": "string"
                 },
                 "match": "message",
                 "match_mapping_type": "string"
              }
           }
        ],
        "_all": {
           "enabled": true,
           "omit_norms": true
        },
        "properties": {
           "@timestamp": {
              "type": "date",
              "format": "dateOptionalTime"
           },
           "@version": {
              "type": "string",
              "index": "not_analyzed"
           },
           "CCType": {
              "type": "string",
              "norms": {
                 "enabled": false
              },
              "fields": {
                 "raw": {
                    "type": "string",
                    "index": "not_analyzed",
                    "ignore_above": 256
                 }
              }
           },
           "Crawled": {
              "type": "string",
              "norms": {
                 "enabled": false
              },
              "fields": {
                 "raw": {
                    "type": "string",
                    "index": "not_analyzed",
                    "ignore_above": 256
                 }
              }
           },
           "customerid": {
              "type": "string",
              "norms": {
                 "enabled": false
              },
              "fields": {
                 "raw": {
                    "type": "string",
                    "index": "not_analyzed",
                    "ignore_above": 256
                 }
              }
           },

现在我想搜索这些属性字段。我找到了SENSE插件,我试图用它来学习查询,并且能够做到这一点:

GET _search
{
"query": {
    "match": {
       "customerid": "11908906"
    }
}

}

这在返回消息和计数方面效果很好。现在,当我在发现选项卡中尝试Kibana时,我搜索类型(customer_index)并过滤我需要的字段,我看到所有结果。我只是想知道如何在视觉上进行翻译。

1 个答案:

答案 0 :(得分:2)

“not_analyzed”并不意味着“没有编入索引”。这意味着elasticsearch不会尝试分析字符串,而是保持完整。这在elasticsearch中非常常见,具体取决于您的内容。

例如:

/var/log/messages
默认情况下,

将拆分为:

[ "var", "log", "messages" ]

当您想要将其作为完整路径进行搜索时,它不是很有用。通过将字段设置为not_analyzed,它将不管它。您仍然可以使用该字段进行搜索。

其次,您说这些字段不可用于过滤。假设您正在使用Kibana,请注意Kibana将缓存字段映射,这意味着新字段不会自动显示。转到设置 - >指数,选择您的索引,然后点击重新加载字段列表。