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

must_not在Elasticsearch中没有给出预期的空字段结果

寿丰
2023-03-14

这是我的示例es索引文档:

"hits" : [
   {
    "_index" : "project_note",
    "_type" : "project_note",
    "_id" : "19",
    "_score" : 1.0,
    "_source" : {
      "createTime" : "2021-10-04T13:43:55.330",
      "createTimeInMs" : 1633333435330,
      "createdBy" : "test",
      "editTime" : "2021-10-04T13:43:55.330",
      "editTimeInMs" : 1633333435330,
      "editedBy" : "test",
      "versionId" : 1,
      "id" : "19",
      "organizationId" : "28",
      "accessLevel" : "PUBLIC",
      "status" : "ACTIVE",
      "projectId" : "95",
      "userId" : 129,
      "noteType" : "SYSTEM_GENERATED",
      "projectDemographicLogId" : "1"
    },
   {
    "_index" : "project_note",
    "_type" : "project_note",
    "_id" : "19",
    "_score" : 1.0,
    "_source" : {
      "createTime" : "2021-10-04T13:43:55.330",
      "createTimeInMs" : 1633333435330,
      "createdBy" : "test",
      "editTime" : "2021-10-04T13:43:55.330",
      "editTimeInMs" : 1633333435330,
      "editedBy" : "test",
      "versionId" : 1,
      "id" : "19",
      "organizationId" : "28",
      "accessLevel" : "PUBLIC",
      "status" : "ACTIVE",
      "projectId" : "95",
      "userId" : 129
     
    }
]
{
  "query":
  {
  "bool" : {
    "must" : [
      {
        "term" : {
          "projectId" : {
            "value" : "95",
            "boost" : 1.0
          }
        }
      },
      {
        "range" : {
          "createTimeInMs" : {
            "from" : null,
            "to" : 1633594455000,
            "include_lower" : true,
            "include_upper" : true,
            "boost" : 1.0
          }
        }
      }
    ],
    "must_not" : [
      {
        "term" : {
          "noteType" : {
            "value" : "SYSTEM_GENERATED",
            "boost" : 1.0
          }
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}
  
}
  BoolQueryBuilder queryBuilder= QueryBuilders.boolQuery();
               queryBuilder.must(QueryBuilders.termQuery("projectId", requestInfo.getProjectId()));
               queryBuilder.must(rangeQuery("createTimeInMs").lte(requestInfo.getCreateTimeInMs()));

               if(!requestInfo.isIncludeLog()) {
                 
                   queryBuilder.mustNot(QueryBuilders.termQuery("noteType", Defs.SYSTEM_NOTE_TYPE));
                 
               }

共有1个答案

百里成仁
2023-03-14

如果只使用查询的must_not部分(不包括must部分)

{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "noteType.keyword": {
              "value": "SYSTEM_GENERATED",
              "boost": 1.0
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1.0
    }
  }
}

搜索结果与你期望得到的相似

"hits": [
      {
        "_index": "69477995",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "createTime": "2021-09-26T15:54:08.373",
          "createTimeInMs": 1632650048373,
          "createdBy": "test",
          "editTime": "2021-09-26T15:54:08.373",
          "editTimeInMs": 1632650048373,
          "editedBy": "test",
          "versionId": 1,
          "id": "18",
          "note": "note-1, simple note ",
          "organizationId": "28",
          "accessLevel": "PUBLIC",
          "status": "ACTIVE",
          "taskId": "5",
          "userId": 129
        }
      }
    ]
 类似资料:
  • 这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?

  • 我正在使用Spring data elasticsearch查询我的elastic文档。我的Elasticsearch实体类: 为了简洁起见,我还做了其他事情,比如设置存储库。数据搜索: Spring为上述调用生成的查询: 查询结果: 查看结果集,检查项目名称字段值,如包含方法!它没有检查完整的给定参数<为什么会这样?如何解决这些问题 Add:organizationId和projectName字

  • 我正在使用Standard ardAnalyser索引10个文本文档。 上面是用来索引文档的代码片段。出于测试目的,我正在搜索一个名为“灰烬”的字段。 当我使用QueryParser时,Lucene给出了预期的搜索结果。 但是,当我使用TermQuery API时,我没有得到所需的结果。我正在展示我为TermQuery所做的代码更改。 对stackoverflow本身做了一些研究,例如Lucene

  • 我有一个索引,其中我的每个对象都有状态字段,该字段可以有一些预定义的值。我想获取所有状态为“已启动”、“已更新”、“已删除”的查询,任何与这些匹配的,因此我使用Querybuilder和nativeSearchQuery,通过ElasticsearchOperations在控制台上打印的java创建了这个查询: 我的索引中有“INITIATED”状态的数据,但没有得到查询中提到的任何状态的人。请如

  • 我在映射中设置了一个日期字段,如下所示: 在我的应用程序中,字段group psAssignedDate最初设置为空字符串。分配组时,将生成unix时间戳并将其存储在字段中。我试图使用elasticsearch的批量更新功能来引入一组带有“AssignedDate”的文档,因为还没有分配组。不过,Elasticsearch不会对文档进行索引。这在日志文件中: 弹力搜索似乎支持JSON空值...我需

  • 我相信下面的代码 应打印 事实上,当Python正常执行时就是这种情况(这里是在Wandbox上运行的示例)。 但现实是无情的(像往常一样);Google Colborator打印一个没有“三个点”的结果: 我还用本地安装的Jupyter(Python 3.7.13、Jupyter notebook 6.4.12、IPython 7.34.0)尝试了相同的代码,结果与Google Colabora