I'm using the Suggest API to create an autocomplete for restaurant names, but I've run into a small problem. Some restaurant names start with numbers, for example:
68 - 86 Bar & Restaurant
I want to be able to type 68
and get the restaurant back. I've tried using the whitespace analyzer, but it doesn't fix my issue.
Here is the analyze output for the restaurant name:
{
"tokens": [
{
"token": "68",
"start_offset": 0,
"end_offset": 2,
"type": "<NUM>",
"position": 1
},
{
"token": "86",
"start_offset": 5,
"end_offset": 7,
"type": "<NUM>",
"position": 2
},
{
"token": "bar",
"start_offset": 8,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "restaurant",
"start_offset": 14,
"end_offset": 24,
"type": "<ALPHANUM>",
"position": 4
}
]
}
Here are the commands to reproduce my issue:
PUT restaurants
{ }
PUT restaurants/restaurant/_mapping
{
"location": {
"index_analyzer": "whitespace",
"search_analyzer": "whitespace",
"properties": {
"name_suggest": {
"type": "completion",
"payloads": true
}
}
}
}
POST restaurants/restaurant/1
{
"name_suggest": {
"input": [
"68 - 86 Bar & Restaurant"
],
"output": "68 - 86 Bar & Restaurant",
"payload": {
"id": 1067
}
}
}
POST restaurants/_suggest
{
"suggestions": {
"text": "68 - 86",
"completion": {
"field": "name_suggest"
}
}
}
I don't get any results from _suggest. Any help would be appreciated.
I've solved it, simple really, but maybe a bug?
Instead of:
PUT restaurants/restaurant/_mapping
{
"location": {
"index_analyzer": "whitespace",
"search_analyzer": "whitespace",
"properties": {
"name_suggest": {
"type": "completion",
"payloads": true
}
}
}
}
I now have:
PUT restaurants/restaurant/_mapping
{
"location": {
"properties": {
"name_suggest": {
"type": "completion",
"index_analyzer": "whitespace",
"search_analyzer": "whitespace",
"payloads": true
}
}
}
}
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