I'm working on a react app which needs to fetch data from elsaticsearch. In frontend, actually I'm trying to use axios to do the request:
const query = {
query: {
match: {
"_id": "AV12n5KzsohD5gXzTnOr"
}
}
};
axios.get('http://localhost:9200/my-index/my-type/_search', query)
.then((res) => {
console.log(res);
});
I want to get the specific document with some ID. The above query actually works inside kibana. However, the above query returns all the documents inside my-type, what am I doing wrong here?
I think the below should work. Although the Axios README says that data
is specifically only for PUT
, POST
, and PATCH
requests, I didn't see anything in the code that enforces this, and a simplified test shows that the request body is indeed sent for GET
requests:
axios.get('http://localhost:9200/my-index/my-type/_search', {
data: JSON.stringify(query),
}).then((res) => {
console.log(res);
});
EDIT
Note that I've only tested this in Node.js, not in a browser. Browsers may be less inclined to include request bodies with GET
requests.
EDIT 2
Elasticsearch seems to allow sending the request body in a parameter instead, perhaps because of this very issue.
This should do the trick:
axios.get('http://localhost:9200/my-index/my-type/_search', {
params: {
source: JSON.stringify(query),
source_content_type: 'application/json'
}
}).then((res) => {
console.log(res);
});
EDIT 3
This does indeed seem to be a general restriction on making GET
requests in browsers. Per the documentation for XMLHttpRequest.send:
If the request method is GET or HEAD, the argument is ignored and request body is set to null.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With