ElasticSearch 搜索字段值不会 return

ElasticSearch Search for Field Values does not return

假设我在 Elastic Search 中有文档,它在 _source 中包含字段“provider”。

我尝试了很多查询,但 none 似乎 return 具有搜索值的文档。

文档:

"_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);

我的回复是空白的。

谢谢。

您的 Elasticsearch 查询肯定没有什么问题

  1. 似乎 provider 字段是对象或嵌套类型,而在您的查询中您只是提到 Coursera 但它应该与 name 子字段匹配provider 字段并基于对象或嵌套数据类型,您需要修改查询。

  2. 您使用的 term query 未被分析并用于关键字,即完全匹配,而如果您的 name 字段定义为 text,它将是在索引时小写并且 Coursera 与大写 C 不匹配,您需要在文本字段上使用 match 查询。

谢谢,嵌套是个问题。我以为它会搜索对象。

遇到了好线程。

这样解决的:

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

    this.multiRequest.add(searchRequest);