gpt4 book ai didi

ElasticSearch 应该有 nested 和 bool must_not exists

转载 作者:行者123 更新时间:2023-12-02 23:08:16 33 4
gpt4 key购买 nike

具有以下映射:

"categories": {
"type": "nested",
"properties": {
"category": {
"type": "integer"
},
"score": {
"type": "float"
}
}
},

我想使用 categories 字段返回以下任一文档:

  • 在给定类别中得分高于阈值,或者
  • 没有类别字段

这是我的查询:

{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "categories",
"query": {
"bool": {
"must": [
{
"terms": {
"categories.category": [
<id>
]
}
},
{
"range": {
"categories.score": {
"gte": 0.5
}
}
}
]
}
}
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "categories"
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}

它正确地返回带有和不带有类别字段的文档,并对结果进行排序,以便我想要的结果排在第一位,但它不会过滤分数低于 0.5 阈值的结果。

最佳答案

好问题。

那是因为 categories 从 elasticsearch 的角度来看并不完全是一个字段[一个在其上创建倒排索引并用于查询/搜索的字段],而是 categories.categorycategories.score 是。

结果 categories 在任何文档中都找不到,这实际上对所有文档都是如此,你观察你所看到的结果。

将查询修改为以下,您会看到您的用例正常工作。

POST <your_index_name>/_search
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "categories",
"query": {
"bool": {
"must": [
{
"terms": {
"categories.category": [
"100"
]
}
},
{
"range": {
"categories.score": {
"gte": 0.5
}
}
}
]
}
}
}
},
{
"bool": {
"must_not": [ <----- Note this
{
"nested": {
"path": "categories",
"query": {
"bool": {
"must": [
{
"exists": {
"field": "categories.category"
}
},
{
"exists": {
"field": "categories.score"
}
}
]
}
}
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}

关于ElasticSearch 应该有 nested 和 bool must_not exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63041859/

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