Hi,
I have hierarchical data: orders consist of several order items.
How can I search for a certain orderItem without getting returned the other
items of the same order?
I tried to use nested documents, but I always receive the whole order and
not the requested order item.
Example:
POST /salesorder7
{
"mappings": {
"complete": {
"properties": {
"orderDetails": {
"type": "nested",
"properties": {
"lineItemNumber": {
"type": "string"
},
"productInformation": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"totalLineItemPrice": {
"properties": {
"amount": {
"type": "float"
},
"currency": {
"type": "string"
}
}
},
"orderHeader": {
"properties": {
"orderNumber": {
"type": "string"
}
}
}
}
}
}
}
}
}
PUT /salesorder7/complete/1
{
"orderHeader": {
"orderNumber": "1"
},
"orderDetails": [
{
"lineItemNumber": "11",
"productInformation": {
"name": "product1",
"id": "p1"
},
"totalLineItemPrice": {
"amount": "105.04",
"currency": "EUR"
}
},
{
"totalLineItemPrice": {
"amount": "9.99",
"currency": "EUR"
},
"lineItemNumber": "12",
"productInformation": {
"name": "product2",
"id": "p2"
}
}
]
}
POST /salesorder7/complete/_search
{
"fields": [
"orderHeader.orderNumber",
"orderDetails.unitPrice.amount",
"orderDetails.productInformation.name"
],
"query": {
"nested": {
"path": "orderDetails",
"score_mode": "avg",
"query": {
"bool": {
"must": [
{
"match": {
"orderDetails.productInformation.name":
"product1"
}
}
]
}
}
}
}
}
This returns
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.4054651,
"hits": [
{
"_index": "salesorder7",
"_type": "complete",
"_id": "1",
"_score": 1.4054651,
"fields": {
"orderDetails.productInformation.name": [
"product1",
"product2"
],
"orderHeader.orderNumber": [
"1"
]
}
}
]
}
}
I want it to return product1 only, and not product1 and product2.
How can I achive this?
Best regards
Henrik
P.S. Sorry for not using CURL, under Windows it seems to only accept single
line nonspaced documents or documents in files.
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/4eaf18d4-2db3-4264-8dfc-767ca34d5f28%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.