ElasticSearch搜索字段值不返回

问题描述

让我们说我在Elastic Search中有文档,该文档的_source中确实包含字段“ 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);

我的回答是空白。

谢谢。

解决方法

Elasticsearch查询肯定没有问题

  1. 似乎provider字段是对象或嵌套类型,而在查询中您只是提及Coursera,但应与{{1 }}字段,并根据对象或嵌套数据类型,您需要修改查询。

  2. 您正在使用name,它不会被分析并用于关键字(即完全匹配),而如果将provider字段定义为term query,则会在索引时间将其小写和name与大写text不匹配,您需要在文本字段上使用Coursera查询。

,

谢谢,嵌套是问题所在。我以为它将对对象进行搜索。

在好的线程中来。

像这样解决它:

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

    this.multiRequest.add(searchRequest);