gpt4 book ai didi

elasticsearch - 在ElasticSearch的IP类型字段中存储CIDR

转载 作者:行者123 更新时间:2023-12-02 22:58:38 25 4
gpt4 key购买 nike

可以在 flex 搜索中以IP地址数据类型存储CIDR表示法吗?当我尝试将它们发布到我的索引中时,它将失败。 (singlerange属性具有ip类型)

{
"singlerange": "222.165.0.0/17",
"name": "Single range"
}

结果
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse [singlerange]"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse [singlerange]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "'222.165.0.0/17' is not an IP string literal."
}
},
"status": 400
}

因此,ES告诉我“不”,但是在我放弃使用ES作为实现此目的的工具之前,我想看看是否有人有解决方法或其他方式来存储和查询范围。

我知道文档具有用例,其中您存储IP并按范围查询。我们的用例相反,我们要存储范围并在索引中查询包含特定IP的任何范围。

最佳答案

当然,发布到StackOverflow的行为使我能够解决问题。

我所做的是像这样在插入时手动创建范围

{
"mappings": {
"newrange": {
"properties": {
"bottomrange": {
"type": "ip"
},
"toprange": {
"type": "ip"
},
"name": {
"type": "text"
}
}
}
}
}

这使我可以插入类似的内容(在此示例中,我代表222.165.0.0/17:
{
"bottomrange": "222.165.0.1",
"toprange": "222.165.127.254",
"name": "Single range"
}

因此,我可以使用此类过滤器进行查询(在这种情况下,尝试查找与222.165.128.99匹配的范围)
{
"query": {
"bool": {
"filter": [
{ "range": { "bottomrange": { "lte": "222.165.128.99" }}} ,
{ "range": { "toprange": { "gte": "222.165.128.99" }}}
]
}
}

}

瞧!可能不是有史以来最高效的ES查询,但是它必须比开发人员将效率更高的开发人员加载到节点中的内存中数千数千个CIDR范围说明符并对其进行迭代以进行匹配。.我们将看到。

关于elasticsearch - 在ElasticSearch的IP类型字段中存储CIDR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com