If you know categories
in advance, you could pass them as payload
using completion suggester.
I created this sample index
PUT suggest_index/product/_mapping
{
"product": {
"properties": {
"name": {
"type": "string"
},
"suggest": {
"type": "completion",
"analyzer": "simple",
"search_analyzer": "simple",
"payloads": true
}
}
}
}
Then I inserted couple of products, supplying categories in payload
PUT suggest_index/product/11
{
"name": "watches",
"suggest": {
"input": [
"watches"
],
"payload": {
"categories": [
"Men",
"Women",
"Kids"
]
},
"weight": 10
}
}
and
{
"name": "phones",
"suggest": {
"input": [
"phones"
],
"payload": {
"categories": [
"Electronics",
"Office Products"
]
},
"weight": 10
}
}
Then when you query, you will get all categories back with suggestion.
POST suggest_index/_suggest
{
"product-suggest": {
"text": "pho",
"completion": {
"field": "suggest"
}
}
}
This is the output I get
"product-suggest": [
{
"text": "pho",
"offset": 0,
"length": 3,
"options": [
{
"text": "phones",
"score": 10,
"payload": {
"categories": [
"Electronics",
"Office Products"
]
}
}
]
}
]
Now you can show them in frontend and when user hits search button you could search in possibly different index with that category and product info.
Does this fulfill your requirements?