I am using @elastic/elasticsearch
library in my node project and i am trying to create an index like this
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })
await client.index({
index: 'myIndex',
refresh: true,
body: {
category: '',
something_else: ''
}
})
When i am trying to fetch a record
const { body } = await client.search({
index: 'myIndex',
body: {
query: {
"match_all": {}
}
}
})
The response is
{
"_index": "myIndex",
"_type": "_doc",
"_id": "cjijWHEBHKa8WEr-JNYu",
"_score": 1,
"_source": {}
},
You basically missed a small thing, while indexing you are sending empty data in both your category
and something_else
field and in _source
field, ES stores what you send as part of your JSON payload. _id
is auto-generated in your case, hence you see the data there, but it was not part of your body(JSON payload)
, which would form _source
content, hence its empty.
If you just include some data in your fields, those documents will have the _source
data.
Let me show you by an example.
{
"mappings": {
"properties": {
"category": {
"type": "text"
},
"something_else": {
"type": "text"
}
}
}
}
POST /{{your-index-name}}/_doc/1
{
--> note empty data or payload
}
{
"query": {
"match_all": {}
}
}
Search response which shows empty _source
"hits": [
{
"_index": "justno",
"_type": "_doc",
"_id": "3",
"_score": 1.0,
"_source": {} --> Output similar to yours
}
]
{
"category": "foo",
"something_else": "bar"
}
"hits": [
{
"_index": "justno",
"_type": "_doc",
"_id": "4",
"_score": 1.0,
"_source": { --> doc which had data, while indexing
"category": "foo",
"something_else": "bar"
}
},
{
"_index": "justno",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {} --> note first doc response
}
]