elasticsearch搜索字段值时不返回

qco9c6ql  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(438)

假设我在ElasticSearch中有一个文档,它在源代码中不包含字段“provider”。
我尝试了很多查询,但似乎没有一个返回的文件与搜索值。
文件编号:

"_source" : {
      "jobs" : [ ],
      "provider" : {
        "id" : "1",
        "name" : "Coursera"
      },
      "sckLevels" : [ ],
      "scks" : [ ],
      "trArea" : [ ],
      "trElems" : [ ],
      "training" : {
        "description" : "Cyber sec desc",
        "id" : "0",
        "img" : "img link",
        "link" : "https://google.com",
        "name" : "Cyber sec",
        "trainingProvID" : "1"
      }

我的查询代码是:

SearchRequest searchRequest = new SearchRequest(index);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    sourceBuilder.query(QueryBuilders.termQuery("provider", "Coursera"));
    searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);

我的回答是空白的。
谢谢您。

wko9yo5t

wko9yo5t1#

你的elasticsearch查询肯定没有什么问题
似乎 provider 字段是对象或嵌套类型,而在查询中您只是提到 Coursera 但它应该与 name 子字段 provider 字段并基于对象或嵌套数据类型,您需要修改查询。
您正在使用 term query 如果你的 name 字段定义为 text 在索引时间和 Coursera 有资本 C 不匹配,你需要使用 match 查询文本字段。

5vf7fwbs

5vf7fwbs2#

谢谢,筑巢是个问题。我以为它会对目标进行搜索。
遇到了好线索。
解决方法如下:

SearchRequest searchRequest = new SearchRequest(index);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    sourceBuilder.query(QueryBuilders.matchQuery("provider.name", "Coursera"));
    searchRequest.source(sourceBuilder);

    this.multiRequest.add(searchRequest);

相关问题