gpt4 book ai didi

ElasticSearch:何时使用多字段

转载 作者:行者123 更新时间:2023-12-04 08:31:34 25 4
gpt4 key购买 nike

我们有一个带有关键字字段的索引,它通常是一个 ip 地址,但并非总是如此。我们希望能够不仅使用关键字还使用 CIDR 表示法在该字段上搜索此索引,仅支持“ip”类型的字段。从表面上看,这看起来像是多字段的用例。
来自 https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html :

It is often useful to index the same field in different ways for different purposes. This is the purpose of multi-fields


因此,以下映射似乎对我们有意义:
{
"mappings": {
"my_field": {
"type": "keyword"
"fields": {
"ip": {
"type": "ip"
"ignore_malformed": true
}
}
}
}
}
因此,当我们的应用程序有一组非 ip 地址、ip 地址和 ip 地址的 CIDR 符号块/范围并需要通过它们进行查询时,我假设应用程序会将这些集合拆分为一组非 ip 地址另一个带有 ip 地址/CIDR 符号块,并在我的查询中从它们中创建两个单独的术语过滤器,如下所示:
{
"query": {
"bool": {
"filter": [
{
"terms": {
"my_field.ip": [
"123.123.123.0/24",
"192.168.0.1",
"192.168.16.255",
"192.169.1.0/24"
]
}
},
{
"terms": {
"my_field": [
"someDomain.com",
"notAnIp.net"
]
}
}
]
}
}
}
这是多字段的正确使用吗?我们应该以其他方式实现这一目标吗?与使用多字段给出的示例不同,它实际上是字段值的子集,而不是全部,因为我使用 ignore_malformed 来丢弃子字段中的非 IP 地址。如果有更好的方法,那是什么?

最佳答案

是的,您对多字段的理解是正确的,您只需要了解您需要明确定义子字段定义(数据类型和分析器)并明确映射它们,以便它使用定义的(数据类型和分析仪)。
现在,一旦数据以您想要的格式编入索引,您就可以根据您的用例包含/排除子字段。
Multi-fields with multiple analyzers这是实现多语言搜索非常常见的一个更好的例子,您可以引用。

关于ElasticSearch:何时使用多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64995345/

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