Elasticsearch stores FST on a per segment basis, which means suggestions scale horizontally as more new nodes are added. It uses an in-memory data structure called Finite State Transducer.
For example, you want to suggest song titles filtered by certain artists or you want to boost song titles based on their genre.Ĭompletion Suggester Completion Suggester is a type of suggester in Elasticsearch, which is used to implement autocomplete functionality. The completion suggester considers all documents in the index, but it is often desirable to serve suggestions filtered and/or boosted by some criteria. It is not meant for spell correction or did-you-mean functionality like the term or phrase suggesters. This is a navigational feature to guide users to relevant results as they are typing, improving search precision. The completion suggester provides auto-complete/search-as-you-type functionality. You add fuzziness to the query.Elasticsearch completion suggester filter
#Elasticsearch suggester weight software
"total" : ,Īssume sol for Solution Architect was a typo and you are searching for Software Developers. By typing eng we don't know for sure that the user is searching for Software Engineer (weight 1), but we can tell for sure it could be an Engineer (weight 2). Weights can be defined with each document to control their ranking. So we have covered the terms Engineer (doc 3) and Software (doc 2) to get a decent suggestion for Software Engineer. The first rank is Engineer, since we do not know if he is really search for Software Engineer we put it on the second rank.Īn input field can have various canonical or alias name for a single term. PUT jobs/_doc/1?refreshĪ second document: PUT jobs/_doc/2?refreshĪ third document: PUT jobs/_doc/3?refresh We store the following suggestion document.
There is also a blog post from Elastic that describes the inner workings of FST.
#Elasticsearch suggester weight code
For persons with a hungry mind, look at the source code on Github in .CompletionFieldMapper. These data structures are weighted Finite State Transducers in short FST. The suggester uses data structures that enable fast lookups, but are costly to build and are stored in-memory. Hence, completion suggester is optimized for speed. Ideally, auto-complete functionality should be as fast as a user types to provide instant feedback relevant to what a user has already typed in. However, it allows you to have typos, that you can adjust with fuzziness. The most played song during writing: Waiting for the End by Linkin ParkĪn excellent explanation from the official reference:.In this article, we are going to complete with a hands-on example. Movie, song or job titles have a widely known or popular order. Suggesters are an advanced solution in Elasticsearch to return similar looking terms based on your text input. In the previous articles, we look into Prefix Queries and Edge NGram Tokenizer to generate search-as-you-type suggestions.