gpt4 book ai didi

list - 如何仅获取与 Elasticsearch 列表中匹配的元素值?

转载 作者:行者123 更新时间:2023-12-03 01:33:57 29 4
gpt4 key购买 nike

[嗨,您好]

我想创建一个ES查询,该查询仅检索列表中匹配的某些元素。

这是我的ES索引架构。

"test-es-2018":{
"aliases": {},
"mappings": {
"test-1": {
"properties": {
"categoryName": {
"type": "keyword",
"index": false
},
"genDate": {
"type": "date"
},
"docList": {
"properties": {
"rank": {
"type": "integer",
"index": false
},
"doc-info": {
"properties": {
"docId": {
"type": "keyword"
},
"docName": {
"type": "keyword",
"index": false
},
}
}
}
},
"categoryId": {
"type": "keyword"
},
}
}
}

}

类别中列出了一些文档。列表中的文档具有自己的信息。

*在Kibana中的搜索查询。
source": { 
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 2,
"doc-info": {...}
},
{
"rank": 1,
"doc-info": {...}
},
{
"rank": 5,
"doc-info": {...}
},
],
"categoryId": "201"
}

首先,我只想获取列表中匹配的元素值。

我只想查看列表中排名为1的文档。但是,如果我按以下方式使用 match查询,则结果与kitana 中的 *搜索查询相同。

*匹配查询在Kibana中。
GET test-es-2018/_search
{
"query": {
"bool": {
"must": [
{ "match": { "docList.rank": 1 } },
]
}
}
}

我认为,它似乎打印了整个列表,因为它包含一个排名第一的文档。

我想要的是:
source": { 
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 1,
"doc-info": {...}
},
],
"categoryId": "201"
}

这可能吗?

其次,我想按等级对docList进行排序。我尝试通过创建如下查询来进行排序,但未对其进行排序。

*排序查询在Kibana中。
GET test-es-2018/_search? 
{
"query" : {
"bool" : {...}
},
"sort" : [
{
"docList.rank" : {
"order" : "asc"
}
}
]
}

我想要的是:
source": { 
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 1,
"doc-info": {...}
},
{
"rank": 2,
"doc-info": {...}
},
{
"rank": 5,
"doc-info": {...}
},
],
"categoryId": "201"
}

我不知道如何访问列表。这两个问题都有好主意吗?

最佳答案

  • 通常,您可以使用source filter来仅检索文档的一部分,但是这种方式无法根据其值排除某些字段。
  • 据我所知,Elasticsearch不支持更改_source中字段值的顺序。通过使用nested字段以及inner_hits -> sort查询表达式,可以部分实现所需的结果。这样排序后的子匹配将在响应的inner_hits部分中返回。

  • 附言通常,在使用Elasticsearch时,应将索引文档视为最小的不可分割搜索单位。

    关于list - 如何仅获取与 Elasticsearch 列表中匹配的元素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971662/

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