gpt4 book ai didi

mysql - Elasticsearch如何匹配一个二维数组?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:54 27 4
gpt4 key购买 nike

我有一个特殊的数据结构。例如:

{
"name": "test",
"age": 20,
"gender": "M",
"custom": [
["tel", "1234567"], ["weibo", "abcde"], ["weixin", "abcdefg"]......
]
}

{
"name": "test1",
"age": 30,
"gender": "F",
"custom": [
["电话", "1234567"], ["微博", "abcde"], ["微信", "abcdefg"]......
]
}

自定义字段是一个二维数组,我要搜索["tel", "1234567"]。如何通过 ES 使其成为可能?

最佳答案

您需要更改索引自定义 数组的方式。问题是 ES 会在分析期间将其展平,因此 custom 将包含标记 tel1234567weibo, abcde等,即二维结构丢失。

如果你想查询tel1234566,你需要将你的custom字段定义为一个nested datatype,类似这样.

PUT index
{
"mappings": {
"type": {
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
},
"gender": {
"type": "string"
},
"custom": {
"type": "nested",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}
}

然后你可以像这样索引你的文档:

PUT index/type/1
{
"name": "test",
"age": 20,
"gender": "M",
"custom": [
{"key": "tel", "value": "1234567"},
{"key": "weibo", "value": "abcde"},
{"key": "weixin", "value": "abcdefg"}
]
}

最后,您可以查询“tel 1234567”并通过以下查询获取您期望的文档:

POST index/type/_search
{
"query": {
"nested": {
"path": "custom",
"query": {
"bool": {
"must": [
{
"term": {
"custom.key": "tel"
}
},
{
"term": {
"custom.value": "1234567"
}
}
]
}
}
}
}
}

关于mysql - Elasticsearch如何匹配一个二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36154662/

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