我正在处理文件以识别它们是否包含标签以及识别标签的置信度。
我创建了一个名为 tags
的nested
映射,其中包含label
(文本(和confidence
(在 0 到 100 之间浮点(。
这是我认为查询如何工作的示例(我知道它是无效的(。它应该是类似于"查找标签为 A 和 B 的文档。A 的置信度必须至少为 37,B 的置信度必须至少为 80"。
{
"query": {
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"match": {
"tags.label": "A"
},
"range": {
"tags.confidence": {
"gte": 37
}
}
},
{
"match": {
"tags.label": "B"
},
"range": {
"tags.confidence": {
"gte": 80
}
}
}
]
}
}
}
}
}
有什么想法吗?我很确定我需要以不同的方式处理它(不同的映射(。我不确定如何在ElasticSearch中完成此操作。这可能吗?
假设您的父文档将包含两个嵌套文档,如下所示:
{
"tags":[
{
"label":"A",
"confidence":40
},
{
"label":"B",
"confidence":85
}
]
}
如果是这种情况,下面是您的查询方式:
嵌套查询:
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"match": {
"tags.label": "A"
}
},
{
"range": {
"tags.confidence": {
"gte": 37
}
}
}
]
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"match": {
"tags.label": "B"
}
},
{
"range": {
"tags.confidence": {
"gte": 80
}
}
}
]
}
}
}
}
]
}
}
}
请注意,每个嵌套文档都作为单独的文档编制索引。这就是您必须提及两个单独查询的原因。否则,使用您所拥有的功能,它将搜索其父文档的一个/单个嵌套文档中的所有四个值。
希望这有帮助!