关键字字段应该是数组还是单个字符串?

Ada*_*son 5 elasticsearch

我是 ElasticSearch 新手,所以这是一个非常基本的问题。

如果我将一个字段映射为索引中的关键字,文档是否应该包含该字段的字符串数组?还是所有关键字用空格分隔的字符串?

如果我的索引看起来像这样(关键字是我们感兴趣的):

{
  "esidx_j_cv" : {
    "mappings" : {
      "j_cv" : {
        "properties" : {
          "Id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "Keyword" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "Name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

文件应该是这样的:

{
    "_index" : "esidx_j_cv",
    "_type" : "j_cv",
    "_id" : "2fab7349-c13f-447a-95fa-984df6836c14",
    "_score" : 1.0,
    "_source" : {
      "Id" : "2fab7349-c13f-447a-95fa-984df6836c14",
      "Name" : "Jim Bloggs",
      "Keyword" : [
        "San",
        "Andreas",
        "Fault",
        "California"
      ]
    }
 }
Run Code Online (Sandbox Code Playgroud)

或者像这样:

  {
    "_index" : "esidx_j_cv",
    "_type" : "j_cv",
    "_id" : "2fab7349-c13f-447a-95fa-984df6836c14",
    "_score" : 1.0,
    "_source" : {
      "Id" : "2fab7349-c13f-447a-95fa-984df6836c14",
      "Name" : "Jim Bloggs",
      "Keyword" : "San Andreas Fault California"
     }
   }
Run Code Online (Sandbox Code Playgroud)

谢谢,

亚当。

fyl*_*lie 0

使用数组是最惯用的,也是我的建议。您可以像这样查询它(此查询实际上适用于任一选项):

GET index/_search
{
  "query": {
    "match": {
      "Keyword": "California" 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)