Запрос относительно functionScoreQuery эластичного построителя npm для elasticsearch

Я использую функцию ScoreQuery, предоставленную npm для создания эластичных построителей, для запроса моего elasticsearch, запрос создается, но я не могу получить внешние параметры запроса для своего запроса, как показано ниже.

то есть внешние параметры запроса отсутствуют, и поэтому запрос не выполняется, поэтому мне пришлось вручную добавить запрос {} в свое тело. Итак, если кто-нибудь может мне помочь и сказать, чего мне не хватает в моем запросе npm, чтобы получить эти параметры запроса.

var not_body = elasticbuilder.functionScoreQuery()
                         .query(elasticbuilder.matchAllQuery())
                         .functions([
                                            elasticbuilder.weightScoreFunction()
                                              .filter(elasticbuilder.boolQuery().mustNot([
                                                elasticbuilder.hasChildQuery(
                                                    elasticbuilder.boolQuery().must([
                                                      elasticbuilder.matchPhraseQuery("name", "raju" )
                                                    ])
                                                ).type('student')
                                              ]))
                                              .weight(2),

                                            elasticbuilder.weightScoreFunction()
                                              .filter(elasticbuilder.boolQuery().must([
                                                  elasticbuilder.hasChildQuery(
                                                      elasticbuilder.boolQuery().must([
                                                          elasticbuilder.matchPhraseQuery("class", "12")
                                                        ])
                                                  ).type('info')                                                  
                                              ]))
                                            .weight(2)
                        ]).minScore(4).scoreMode('sum');

Текущее тело вывода через этот запрос:

  {
   "function_score": {
   "functions": [
  {
    "filter": {
      "bool": {
        "must_not": {
          "has_child": {
            "query": {
              "bool": {
                "must": {
                  "match_phrase": {
                    "name" : "raju"
                  }
                }
              }
            },
            "type": "student"
          }
        }
      }
    },
    "weight": 2
  },
  {
    "filter": {
      "bool": {
        "must": {
          "has_child": {
            "query": {
              "bool": {
                "must": {
                  "match_phrase": {
                    "class" : "12"
                  }
                }
              }
            },
            "type": "info"
          }
        }
      }
    },
    "weight": 2
  }
],
"query": {
  "match_all": {}
},
"min_score": 4,
"score_mode": "sum"
}
}

Ожидаемое тело вывода:

{    
"query": {
"function_score": {
  "functions": [
    {
      "filter": {
        "bool": {
          "must_not": {
            "has_child": {
              "query": {
                "bool": {
                  "must": {
                    "match_phrase": {
                      "name" : "raju"
                    }
                  }
                }
              },
              "type": "student"
            }
          }
        }
      },
      "weight": 2
    },
    {
      "filter": {
        "bool": {
          "must": {
            "has_child": {
              "query": {
                "bool": {
                  "must": {
                    "match_phrase": {
                      "class" : "12"
                    }
                  }
                }
              },
              "type": "info"
            }
          }
        }
      },
      "weight": 2
    }
  ],
  "query": {
    "match_all": {}
  },
  "min_score": 4,
  "score_mode": "sum"
}
}
}

person Yash Tandon    schedule 07.08.2019    source источник


Ответы (1)


Вы должны обернуть это в elasticbuilder.requestBodySearch()

В твоем случае

elasticbuilder.requestBodySearch().query(not_body)

должен сделать работу

person Pierre Mallet    schedule 07.08.2019
comment
не могли бы вы помочь мне с этой проблемой. ссылка: stackoverflow.com/q/57691108/11432290 - person Yash Tandon; 28.08.2019
comment
@YashTandon использует решение Вэла, оно хорошее. И, кстати, не используйте комментарии, чтобы указывать на новые вопросы. Это не их цель. - person Pierre Mallet; 28.08.2019
comment
он ответил на него после того, как я разместил этот комментарий, более того, я не нашел способа поделиться с вами своим вопросом, поэтому я решил опубликовать его здесь, спасибо за ваше время. - person Yash Tandon; 28.08.2019