Elasticsearch字段名称别名

时间:2015-02-13 10:44:26

标签: elasticsearch lucene

是否可以在elasticsearch中为字段名称设置别名? (就像索引名称可以别名一样)

例如:我有一份文件{'名字':'约翰','姓氏':'史密斯'}

我想别名'名字'到了' ...

4 个答案:

答案 0 :(得分:2)

没有直接的字段别名功能。但是,您可以使用映射中的index_name属性在索引时重命名字段。

  

index_name:将存储在索引中的字段的名称。   默认为属性/字段名称。

有关详细信息,请参阅此处:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html

答案 1 :(得分:2)

快速更新,Elasticsearch 6.4推出了名为 Alias Datatype 的功能。检查下面的映射并作为示例查询。

请注意,在以下字段名alias的映射中,字段的类型为fn

样本映射:

PUT myindex
{
  "mappings": {
    "_doc": {
      "properties": {
        "firstname": {
          "type": "text"
        },
        "fn": {
          "type": "alias",
          "path": "firstname" 
        }
      }
    }
  }
}

样本查询:

GET myindex/_search
{
  "query": {
    "match" : {
      "fn" : "Steve"
    }
  }
}

这个想法是将alias用于创建倒排索引的实际字段。请注意,具有别名数据类型的字段不用于write操作,而仅用于查询目的。

尽管您可以参考我提到的链接以获取更多详细信息,但以下仅是一些重点。

  • 仅在索引具有single mapping时才使用字段别名。必须在6.xx之后的版本中创建索引,或者在旧版本中使用设置index.mapping.single_type: true
  • 创建索引
  • 可以在queryingaggregationssortinghighlightingsuggestion操作中使用
  • 目标字段必须是在其上创建倒排索引的实际字段
  • 无法创建另一个alias字段的alias
  • 不能在多个字段上使用alias。单一别名,单一字段。
  • 不能用作作为使用_source进行源过滤的一部分。

答案 2 :(得分:1)

为现有字段fn添加别名firstname

PUT myindex/_mapping
{
  "properties": {
    "fn": {
      "type": "alias",
      "path": "firstname" 
    }
  }
}

从Elasticsearch 7开始应该以此方式工作。

答案 3 :(得分:0)

您可以尝试使用所需字段上的过滤器在索引上创建别名。必须以这样的方式编写过滤器,以便选择字段中的所有条目。请参阅here中的过滤别名部分。但我有兴趣知道你的用例。为什么要在特定字段上创建别名。