gpt4 book ai didi

elasticsearch - Elasticsearch 中的多层嵌套

转载 作者:行者123 更新时间:2023-11-29 02:52:46 25 4
gpt4 key购买 nike

我有以下结构(非常大的 Elasticsearch 文档的一小部分)

sample: {
{
"md5sum":"4002cbda13066720513d1c9d55dba809",
"id":1,
"sha256sum":"1c6e77ec49413bf7043af2058f147fb147c4ee741fb478872f072d063f2338c5",
"sha1sum":"ba1e6e9a849fb4e13e92b33d023d40a0f105f908",
"created_at":"2016-02-02T14:25:19+00:00",
"updated_at":"2016-02-11T20:43:22+00:00",
"file_size":188416,
"type":{
"name":"EXE"
},
"tags":[

],
"sampleSources":[
{
"filename":"4002cbda13066720513d1c9d55dba809",
"source":{
"name":"default"
}
},
{
"filename":"4002cbda13066720332513d1c9d55dba809",
"source":{
"name":"default"
}
}
]

}
}

我想使用的过滤器是使用 Elasticsearch 按 sample.sampleSources.source 中包含的“名称”进行查找。

我尝试了以下查询

curl -XGET "http://localhost:9200/app/sample/_search?pretty"-d {query}其中,{query} 是

{
"query":{
"nested":{
"path":"sample.sampleSources",
"query":{
"nested":{
"path":"sample.sampleSources.source",
"query":{
"match":{
"sample.sampleSources.source.name":"default"
}
}
}
}
}
}
}

但是,它没有返回任何结果。在我的文档中,有些情况的嵌套比这更深。有人可以指导我应该如何制定此查询以使其适用于所有情况吗?

编辑 1映射:

{
"app":{
"mappings":{
"sample":{

"sampleSources":{
"type":"nested",
"properties":{
"filename":{
"type":"string"
},
"source":{
"type":"nested",
"properties":{
"name":{
"type":"string"
}
}
}
}
}

}

编辑 2Waldemar Neto 在下面发布的解决方案适用于 match query但不适用于 a wild-card or neither for a regexp

可以指导一下吗?我需要通配符和正则表达式查询才能为此工作。

最佳答案

我在这里尝试使用您的示例并且工作正常。看看我的数据。映射:

PUT /app
{
"mappings": {
"sample": {
"properties": {
"sampleSources": {
"type": "nested",
"properties": {
"source": {
"type": "nested"
}
}
}
}
}

}
}

索引数据

POST /app/sample
{
"md5sum": "4002cbda13066720513d1c9d55dba809",
"id": 1,
"sha256sum": "1c6e77ec49413bf7043af2058f147fb147c4ee741fb478872f072d063f2338c5",
"sha1sum": "ba1e6e9a849fb4e13e92b33d023d40a0f105f908",
"created_at": "2016-02-02T14:25:19+00:00",
"updated_at": "2016-02-11T20:43:22+00:00",
"file_size": 188416,
"type": {
"name": "EXE"
},
"tags": [],
"sampleSources": [
{
"filename": "4002cbda13066720513d1c9d55dba809",
"source": {
"name": "default"
}
},
{
"filename": "4002cbda13066720332513d1c9d55dba809",
"source": {
"name": "default"
}
}
]
}

搜索查询

GET /app/sample/_search
{
"query": {
"nested": {
"path": "sampleSources.source",
"query": {
"match": {
"sampleSources.source.name": "default"
}
}
}
}
}

使用通配符的例子

GET /app/sample/_search
{
"query": {
"nested": {
"path": "sampleSources.source",
"query": {
"wildcard": {
"sampleSources.source.name": {
"value": "*aul*"
}
}
}
}
}
}

我看到的唯一不同之处在于路径,您不需要在嵌套路径中设置 sample(类型),只需设置内部对象即可。测试并给我反馈。

关于elasticsearch - Elasticsearch 中的多层嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35722252/

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