弹性搜索:将CSV转换为索引上的数组

时间:2015-01-07 15:27:28

标签: elasticsearch

我有一个包含来自JDBC河流插件的csv字符串的字段,我希望它是一个整数数组。

我已经指定了包含转换的以下映射:

{
    "mytype" : {
        "transform": {
            "script":"ctx._source['AllowedAccountIds'] = ctx._source['AllowedAccountIds']?.tokenize(',')",
            "lang":"groovy"
        },
         "properties": {
           "AllowedAccountIds": { "type": "integer"},          
           "Name": { "type": "string" },
           "Description":{"type":"string"}
        }
    }
}

如果我请求带有?_source_transform参数的文档:

,我可以看到这种方法有效
{
    "_index": "myindex",
    "_type": "mytype",
    "_id": "1",
    "_version": 1,
    "found": true,
    "_source": {
        "Name": "Lorem Ipsum",
        "AllowedAccountIds": [
            "1",
            "3",
            "19",
            "14",
            "26"
        ],
        "Description": "Vivamus ex libero, pellentesque ultricies sodales vitae, mollis a magna. Vestibulum est purus, placerat eu enim a, ullamcorper lacinia ligula. Nullam pellentesque tristique mollis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In feugiat augue sem, eu scelerisque augue gravida nec. Vivamus fermentum finibus arcu, at commodo sapien imperdiet ac. Ut posuere cursus neque, eu ornare lorem ornare sit amet. Vivamus pulvinar ultricies eros. Aliquam euismod ex non dapibus consequat. Donec tristique tortor id feugiat porttitor. Morbi turpis purus, vestibulum sit amet accumsan sed, ultricies quis justo."
    }
}

但如果我没有指定参数,我会看到以下内容:

{
    "_index": "myindex",
    "_type": "mytype",
    "_id": "1",
    "_version": 1,
    "found": true,
    "_source": {
        "Name": "Lorem Ipsum",
        "AllowedAccountIds": "1,3,19,14,26",
        "Description": "Vivamus ex libero, pellentesque ultricies sodales vitae, mollis a magna. Vestibulum est purus, placerat eu enim a, ullamcorper lacinia ligula. Nullam pellentesque tristique mollis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In feugiat augue sem, eu scelerisque augue gravida nec. Vivamus fermentum finibus arcu, at commodo sapien imperdiet ac. Ut posuere cursus neque, eu ornare lorem ornare sit amet. Vivamus pulvinar ultricies eros. Aliquam euismod ex non dapibus consequat. Donec tristique tortor id feugiat porttitor. Morbi turpis purus, vestibulum sit amet accumsan sed, ultricies quis justo."
    }
}

我一直希望看到第一个结果。我误解了变换的用途吗?

任何人都可以对此有所了解吗?文档没什么帮助。

编辑:这似乎解决了我从ElasticSearch.NET查询时的问题 - 但我仍然想了解发生了什么。

1 个答案:

答案 0 :(得分:1)

根据文件 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-transform.html#mapping-transform

  

但原始来源存储在_source

这意味着实际的JSON不会被转换,但转换到存储(如果启用)和反向索引的数据将被转换。

因此,您的搜索仅根据转换后的内容进行操作,但默认情况下您将检索的数据不会被转换。