Reputation: 215
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.
Upvotes: 5
Views: 2235
Reputation: 215
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
}
}
}
}
Upvotes: 7