Skip to content

Latest commit

 

History

History
30 lines (24 loc) · 1.47 KB

05_Intro.asciidoc

File metadata and controls

30 lines (24 loc) · 1.47 KB

Controlling relevance

Databases which deal purely in structured data (such as dates, numbers, and string enums) have it easy — they just have to check whether a document (or a row, in a relational database) matches the query or not.

While Boolean yes/no matches are an essential part of full text search, they are not enough by themselves. Instead, we also need to know how relevant each document is to the query. Full text search engines not only have to find the matching documents, but also to sort them by relevance.

Full text relevance formulae, or similarity algorithms, combine several factors to produce a single relevance _score for each document. In this chapter, we will examine the various moving parts and discuss how they can be controlled.

Of course, relevance is not just about full text queries — it may need to take structured data into account as well. Perhaps we are looking for a holiday home with particular features (air-conditioning, sea view, free wi-fi). The more features that a property has, the more relevant it is. Or perhaps we want to factor in sliding-scales like recency, price, popularity or distance, while still taking the relevance of a full text query into account.

All of this is possible thanks to the powerful scoring infrastructure available in Elasticsearch.

We will start by looking at the theoretical side of how Lucene calculates relevance, then move on to practical examples of how you can control the process.