【问题标题】:Elasticsearch field name aliasingElasticsearch 字段名称别名
【发布时间】:2015-04-14 09:17:20
【问题描述】:

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

例如:我有一个文档 {'firstname': 'John', 'lastname': 'smith'}

我想将 'firstname' 别名为 'fn'...

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    只是一个快速更新,Elasticsearch 6.4 提出了一个名为 Alias Datatype 的功能。检查以下映射和查询作为示例。

    注意,在下面的字段名fn映射中,字段的类型是alias

    示例映射:

    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 进行源过滤的一部分。

    【讨论】:

    • "root_cause": [ { "type": "resource_already_exists_exception", "reason": "index [sync_refund/XQhtEh6CR-Ogw4XiWQXLCQ] 已经存在", "index_uuid": "XQhtEh6CR-Ogw4XiWQXLCQ", " index": "sync_refund" } ] 我收到此错误消息,版本 6.8
    【解决方案2】:

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

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

    更多信息请看这里:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html

    【讨论】:

    • 我在映射中尝试了 index_name。 “Keeeeeey1”:{“类型”:“字符串”,“index_name”:“k1”}。我插入了一些文档,当我查找 localhost:9200/testalias/_search?q=*&pretty 时,我得到了文档字段名称为“Keeeeeey1”的结果。我假设这是正确的,因为“k1”只是存储在商店内部,所有显示器都将显示“Keeeeeey1”。我理解正确吗?
    • 仅供参考...我使用别名的原因是为了减小数据库大小...通过将较长键名的大小减小为较短的别名
    • 实际上索引将“k1”作为默认字段名。但是,由于存储在 elasticsearch 中的文档是无模式的,您当然可以发布一个新文档 {"Keeeeey1":"value1"}。 Elasticsearch 足够聪明,可以理解在查询 k1 字段时,应该包含我之前提到的已被索引的文档。查询或使用字段名称时,会自动检测逻辑完整路径并进入 index_name,反之亦然。请参阅elasticsearch.org/guide/en/elasticsearch/reference/current/… 了解更多信息。
    • 链接失效了:有谁知道这些天在哪里可以找到这些信息?
    【解决方案3】:

    为现有字段 firstname 添加别名 fn

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我使用别名的原因是减少数据库大小....通过将较长键名的大小减少到较短的别名
      猜你喜欢
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2016-04-20
      • 2011-10-07
      相关资源
      最近更新 更多