-data raw in angular 2生成一个简单的http get请求+

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

我正在努力做到以下几点 GET request 使用 angular httpClient 但到目前为止还没有成功。有人能帮忙吗。请求如下。

curl --location --request GET 'MY_URL_TO_SEND' 
--header 'Content-Type: application/json' 
--header 'Authorization: MY_TOKEN' 
--data-raw '{
    "_source": ["title"],
    "query": {
        "multi_match": {
                "query": "covid",
                "type": "best_fields",
                "fields": ["title.e_ngrams^4", "description.e_ngrams", "keywords.e_ngrams^2"],
                "fuzziness": 1
            }
    }
}'

当我将它粘贴到 terminal 并将返回以下结果。

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 6,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "stats",
                "_type": "_doc",
                "_id": "daily-covid-19-deaths",
                "_score": 1.0,
                "_source": {
                    "title": "Daily Covid-19 Deaths"
                }
            }]
}
},

但是当我通过angular打电话时 title 作为 _source 它将返回我所有的其他参数,这也表明调用工作不正常。
这是我到目前为止试过的。

const httpParams: HttpParams = new HttpParams();
httpParams.set('_source', JSON.stringify(['title', 'slug']));
httpParams.set(
  'query',
  JSON.stringify({
    multi_match: {
      query: query,
      type: 'best_fields',
      fields: [
        'title.e_ngrams^4',
        'description.e_ngrams',
        'keywords.e_ngrams^2',
      ],
      fuzziness: 1,
    },
  })
);

this.http
  .get(environment.ES.searchAPI, {
    headers: this.httpHeaders,
    params: httpParams,
  })
  .subscribe((data: any) => {
    this.searchResults.next(this.parseResults(data));
  });

}
这将返回我的结果,但传递的参数(例如 _source )别工作了。它只返回所有结果。
这是我的应用程序 httpClient 从上述代码返回。

n1bvdmb6

n1bvdmb61#

你可以用 POST request 相反。
举个例子:

const body = JSON.stringify({
  _source: ['title', 'slug'],
  query:{
    multi_match: {
      query: query,
      type: 'best_fields',
      fields: [
        'title.e_ngrams^4',
        'description.e_ngrams',
        'keywords.e_ngrams^2',
      ],
      fuzziness: 1,
    }
  }
});

const httpHeaders = new HttpHeaders({
    'Content-Type' : 'application/json'
 });

this.httpClient.post(environment.ES.searchAPI, body, {
    headers:httpHeaders
  })    
  .subscribe((data: any) => {
    console.log(data);
  });

为什么在你的例子中你得到了所有的结果参数?
你的 GET request 忽略 params: httpParamshttpParamsnull .
试着改变 httpParams.sethttpParams = httpParams.set

相关问题