当前位置: 首页 > 知识库问答 >
问题:

保留筛选查询结果中缺少字段的文档

戚阳
2023-03-14

我正在用以下查询查询我的索引:

GET /dbpedia201510/entity/_search
{
    "from": 0,
    "size": 10000,
    "query": {
        "bool": {
            "must": {
                "query_string":{
                    "fields": ["name","alias","pseudonyme"],
                    "query": "Elias~ Franck~",
                    "default_operator": "OR",
                    "fuzziness": "auto"
                }
            },
            "filter": {
                "bool": {
                    "must": [
                        {
                            "terms": {
                                "job.keyword":["Architect","Politician","Tailor"]
                            }
                        }
                    ]
                }
            }
        }
    }
}

job字段是字符串数组,查询的工作方式与预期相同。然而,有些文档没有job字段,我也希望获得这些文档。

我怎么能那么做?

共有1个答案

缑智敏
2023-03-14

这里需要使用should子句,当job字段存在并匹配术语查询或job字段不存在时,该子句将匹配。

您的最终查询应该如下所示:

GET /dbpedia201510/entity/_search
{
  "from": 0,
  "size": 10000,
  "query": {
    "bool": {
      "must": {
        "query_string": {
          "fields": ["name","alias","pseudonyme"],
          "query": "Elias~ Franck~",
          "default_operator": "OR",
          "fuzziness": "auto"
        }
      },
      "filter": {
        "bool": {
          "should": [
            {
              "terms": {
                "job.keyword": ["Architect","Politician","Tailor"]
              }
            },
            {
              "bool": {
                "must_not": {
                  "exists": {
                    "field": "job"
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}
 类似资料:
  • 每个人。在mongo组查询中,结果仅显示参数中的键。如何像mysql查询组一样保留每个组中的第一个文档。例如: 结果: 如何获取以下内容:

  • 使用的解决方案类似于microsoft文档中的内容:https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.linq.documentQueryable.asdocumentQuery?view=azure-dotnet 我们目前正在将我们的数据解决方案转移到cosmosDB,这就是我们如何注意到这个问题的。你知道

  • 我正在尝试查找一个查询唯一的名称列表,并排除两个查询结果之间的共同名称。例如,我想要学生A、B和C所选课程的名称,并从该列表中排除学生D和E所选的课程。在这个问题的答案的帮助下(Neo4j Cypher:从结果中排除某些节点),我尝试了这个密码代码,它是有效的,但我得到的结果是节点。我希望它是一个名称列表,而不是节点。 非常感谢。

  • 我有一个产品集合,每个产品都会有: 价格 属性(例如:大小:xl,s,xxl;颜色:黄,红,蓝;....) 制造商 类别(一个产品可以有多个类别) 此集合在ElasticSearch中索引。现在,当我查询类别A中所有产品的列表时,我还希望获得: 所有产品的价格范围(最小-最大) 所有可能选项和值的列表(大小、颜色和相应的值xl、s、xxl、Yellog、red、blue) 制造商(耐克、阿迪达斯、

  • 我有一个自定义的职位类型,这是一个供应商的个人资料页排序。在每一页的末尾,我都有一个产品小部件,它应该显示这个供应商的产品。 所有产品都被分配到供应商特定的类别。因此供应商A的个人资料页面应显示分配给product_catA的所有产品。 相应的产品类别由每个配置文件页面上的acf字段指定。因此,我的自定义筛选查询需要获取指定的产品目录,然后按该类别筛选所有产品。我正在努力研究如何将帖子中的自定义字

  • 我已经把这个贴在ES组上了,但是我没有得到回应,所以我把它贴在了so上。链接https://discuse . elastic . co/t/missing-field-value-for-nested-field-function-score-query-V7-10-2/291365 我已经尝试了很长时间,但嵌套字段值在计算分数时总是表示缺少字段值。 映射: 为了简单起见,我只保留了一个记录。记