2021-07-04 19:14:32 +02:00
<!DOCTYPE html>
< html lang = "en" >
2021-05-24 01:16:43 +02:00
<!--
!!! WARNING !!!
This file was auto-generated from readme/spec/search_sorting.md and any manual change
made to it will be overwritten. To make a change to this file please modify
the source Markdown file:
https://github.com/laurent22/joplin/blob/dev/readme/spec/search_sorting.md
-->
2021-07-04 19:14:32 +02:00
< head >
2021-07-16 18:32:38 +02:00
<!-- Donate button A/B testing -->
< script async src = "https://www.googleoptimize.com/optimize.js?id=OPT-PW3ZPK3" > < / script > < meta
2021-07-04 19:14:32 +02:00
charset="utf-8"
http-equiv="X-UA-Compatible"
content="IE=edge,chrome=1"
/>
< link rel = "icon" href = "/images/favicon.png" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< meta name = "theme-color" content = "#000000" / >
2021-07-24 12:15:07 +02:00
< meta name = "description" content = "Joplin, the open source note-taking application" / >
2021-07-04 19:14:32 +02:00
< link
rel="stylesheet"
href="/ css/bootstrap5.0.2.min.css"
as="style"
/>
2021-08-20 12:11:35 +02:00
< link rel = "stylesheet" href = "/css/fontawesome-all.min.css?t=1629454276652" >
2021-07-04 19:14:32 +02:00
< link
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700& display=swap"
rel="stylesheet"
as="style"
media="all"
onload="this.media='all'; this.onload = null"
/>
2021-08-20 12:11:35 +02:00
< link rel = "stylesheet" href = "/css/site.css?t=1629454276652" as = "style" / >
2021-07-04 19:14:32 +02:00
< title > Search Engine | Joplin< / title >
2021-07-31 15:44:00 +02:00
< script
src="/ js/jquery-3.6.0.min.js"
rel="preload"
as="script"
>< / script >
2021-07-04 19:14:32 +02:00
< / head >
2021-07-31 15:46:37 +02:00
< body class = "website-env-prod" >
2021-07-10 12:22:31 +02:00
< div class = "container-fluid generic-template -page" id = "main-container" >
2021-05-24 01:16:43 +02:00
2021-07-10 12:22:31 +02:00
< div class = " navbar-main white-bg" id = "nav-section" >
< div class = "container" >
< div class = "row" >
< div class = "col-3" >
< a href = "/" >
< img
src="/ images/logo-text-blue.svg"
alt=""
id="top-logo"
width="180"
/>
< / a >
< / div >
< div class = "col-9 text-right d-none d-md-block" >
< a href = "/help/" class = "fw500" > Help< / a >
< a href = "https://discourse.joplinapp.org/" class = "fw500" > Forum< / a >
2021-07-19 12:01:01 +02:00
< a href = "/plans/" class = "button-link btn-trans plans-button" > Joplin Cloud< / a > < a class = "button-link btn-blue sponsor-button" href = "/donate" >
2021-07-16 18:14:56 +02:00
< i class = "fas fa-heart heart-full" > < / i > < i class = "far fa-heart heart-line" > < / i > Support us
2021-07-10 12:22:31 +02:00
< / a > < / div >
2021-08-16 17:50:14 +02:00
< div class = "col-9 text-right d-block d-md-none navbar-mobile-content" >
< a class = "button-link btn-blue sponsor-button" href = "/donate" >
< i class = "fas fa-heart heart-full" > < / i > < i class = "far fa-heart heart-line" > < / i > Support us
< / a >
2021-07-10 12:22:31 +02:00
< span class = "pointer"
>< img
src="/ images/mobile-menu-black-open-icon.png"
id="open-menu-mobile"
alt=""
/>< / span >
2021-05-24 01:16:43 +02:00
2021-07-10 12:22:31 +02:00
< div id = "menu-mobile" >
< div >
< div class = "text-right" >
< img
src="/ images/close-icon.png"
alt=""
class="pointer"
id="close-menu-mobile"
/>
2021-07-04 19:14:32 +02:00
< / div >
2021-05-24 01:16:43 +02:00
2021-07-10 12:22:31 +02:00
< div class = "text-center menu-mobile-top" >
< a href = "https://discourse.joplinapp.org/" class = "fw500 mobile-menu-link" > Forum< / a >
< a href = "/help/" class = "fw500 mobile-menu-link" > Help< / a >
< / div >
2021-05-24 01:16:43 +02:00
2021-07-10 12:22:31 +02:00
< div class = "menu-mobile-buttons" >
2021-07-19 12:01:01 +02:00
< a href = "/plans/" class = "button-link btn-trans plans-button" > Joplin Cloud< / a > < a class = "button-link btn-blue sponsor-button" href = "/donate" >
2021-07-16 18:14:56 +02:00
< i class = "fas fa-heart heart-full" > < / i > < i class = "far fa-heart heart-line" > < / i > Support us
2021-07-10 12:22:31 +02:00
< / a > < / div >
< / div >
2021-05-24 01:16:43 +02:00
2021-07-16 18:14:56 +02:00
< div id = "toc-mobile" > < div > < ul >
2021-07-04 19:14:32 +02:00
< li >
< p > Applications< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/desktop/" > Desktop application< / a > < / li >
< li > < a href = "/mobile/" > Mobile applications< / a > < / li >
< li > < a href = "/terminal/" > Terminal application< / a > < / li >
< li > < a href = "/clipper/" > Web Clipper< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
< p > Support< / p >
< ul >
< li > < a href = "https://discourse.joplinapp.org" > Joplin Forum< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/markdown/" > Markdown Guide< / a > < / li >
< li > < a href = "/e2ee/" > How to enable end-to-end encryption< / a > < / li >
< li > < a href = "/conflict/" > What is a conflict?< / a > < / li >
< li > < a href = "/debugging/" > How to enable debug mode< / a > < / li >
< li > < a href = "/rich_text_editor/" > About the Rich Text editor limitations< / a > < / li >
< li > < a href = "/faq/" > FAQ< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
2021-08-09 14:19:08 +02:00
< p > Joplin Cloud< / p >
< ul >
< li > < a href = "/share_notebook/" > Sharing a notebook< / a > < / li >
< li > < a href = "/publish_note/" > Publishing a note< / a > < / li >
< / ul >
< / li >
< li >
2021-07-04 19:14:32 +02:00
< p > Joplin API - Get Started< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/api/overview/" > Joplin API Overview< / a > < / li >
< li > < a href = "/api/get_started/plugins/" > Plugin development< / a > < / li >
< li > < a href = "/api/tutorials/toc_plugin/" > Plugin tutorial< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
< p > Joplin API - References< / p >
< ul >
< li > < a href = "https://joplinapp.org/api/references/plugin_api/classes/joplin.html" > Plugin API< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/api/references/rest_api/" > Data API< / a > < / li >
< li > < a href = "/api/references/plugin_manifest/" > Plugin manifest< / a > < / li >
< li > < a href = "/api/references/plugin_loading_rules/" > Plugin loading rules< / a > < / li >
< li > < a href = "/api/references/plugin_theming/" > Plugin theming< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
< p > Development< / p >
< ul >
< li > < a href = "https://github.com/laurent22/joplin/blob/dev/BUILD.md" > How to build the apps< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/spec/e2ee/" > End-to-end encryption spec< / a > < / li >
< li > < a href = "/spec/history/" > Note History spec< / a > < / li >
< li > < a href = "/spec/sync_lock/" > Sync Lock spec< / a > < / li >
< li > < a href = "/spec/plugins/" > Plugin Architecture spec< / a > < / li >
< li > < a href = "/spec/search_sorting/" > Search Sorting spec< / a > < / li >
< li > < a href = "/spec/server_file_url_format/" > Server: File URL Format< / a > < / li >
< li > < a href = "/spec/server_delta_sync/" > Server: Delta Sync< / a > < / li >
< li > < a href = "/spec/server_sharing/" > Server: Sharing< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
< p > Google Summer of Code 2021< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/gsoc2021/index/" > Google Summer of Code 2021< / a > < / li >
< li > < a href = "/gsoc2021/pull_request_guidelines/" > How to submit a GSoC pull request< / a > < / li >
< li > < a href = "/gsoc2021/ideas/" > Project Ideas< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< li >
< p > About< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/changelog/" > Changelog (Desktop App)< / a > < / li >
< li > < a href = "/changelog_cli/" > Changelog (CLI App)< / a > < / li >
< li > < a href = "/changelog_server/" > Changelog (Server)< / a > < / li >
< li > < a href = "/stats/" > Stats< / a > < / li >
< li > < a href = "/donate/" > Donate< / a > < / li >
2021-07-04 19:14:32 +02:00
< / ul >
< / li >
< / ul >
< / div > < / div >
2021-07-10 12:22:31 +02:00
< div >
< p class = "light-blue mobile-menu-link-bottom text-center" >
2021-07-16 18:14:56 +02:00
Copyright © 2016-2021 Laurent Cozic
2021-07-10 12:22:31 +02:00
< br / >
< a href = "/privacy/" class = "fw500" > Privacy Policy< / a >
< / p >
2021-07-04 19:14:32 +02:00
< / div >
< / div >
< / div >
2021-07-10 12:22:31 +02:00
< / div >
< / div >
< / div >
2021-08-09 14:19:08 +02:00
< div class = "help-page-container page-search_sorting" >
2021-07-04 19:14:32 +02:00
< div class = "container" >
< div class = "row content-wrapper" >
< div id = "toc" > < div > < ul >
2021-05-24 01:16:43 +02:00
< li >
< p > Applications< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/desktop/" > Desktop application< / a > < / li >
< li > < a href = "/mobile/" > Mobile applications< / a > < / li >
< li > < a href = "/terminal/" > Terminal application< / a > < / li >
< li > < a href = "/clipper/" > Web Clipper< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
< p > Support< / p >
< ul >
< li > < a href = "https://discourse.joplinapp.org" > Joplin Forum< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/markdown/" > Markdown Guide< / a > < / li >
< li > < a href = "/e2ee/" > How to enable end-to-end encryption< / a > < / li >
< li > < a href = "/conflict/" > What is a conflict?< / a > < / li >
< li > < a href = "/debugging/" > How to enable debug mode< / a > < / li >
< li > < a href = "/rich_text_editor/" > About the Rich Text editor limitations< / a > < / li >
< li > < a href = "/faq/" > FAQ< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
2021-08-09 14:19:08 +02:00
< p > Joplin Cloud< / p >
< ul >
< li > < a href = "/share_notebook/" > Sharing a notebook< / a > < / li >
< li > < a href = "/publish_note/" > Publishing a note< / a > < / li >
< / ul >
< / li >
< li >
2021-05-24 01:16:43 +02:00
< p > Joplin API - Get Started< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/api/overview/" > Joplin API Overview< / a > < / li >
< li > < a href = "/api/get_started/plugins/" > Plugin development< / a > < / li >
< li > < a href = "/api/tutorials/toc_plugin/" > Plugin tutorial< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
< p > Joplin API - References< / p >
< ul >
< li > < a href = "https://joplinapp.org/api/references/plugin_api/classes/joplin.html" > Plugin API< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/api/references/rest_api/" > Data API< / a > < / li >
< li > < a href = "/api/references/plugin_manifest/" > Plugin manifest< / a > < / li >
< li > < a href = "/api/references/plugin_loading_rules/" > Plugin loading rules< / a > < / li >
< li > < a href = "/api/references/plugin_theming/" > Plugin theming< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
< p > Development< / p >
< ul >
< li > < a href = "https://github.com/laurent22/joplin/blob/dev/BUILD.md" > How to build the apps< / a > < / li >
2021-07-10 12:22:31 +02:00
< li > < a href = "/spec/e2ee/" > End-to-end encryption spec< / a > < / li >
< li > < a href = "/spec/history/" > Note History spec< / a > < / li >
< li > < a href = "/spec/sync_lock/" > Sync Lock spec< / a > < / li >
< li > < a href = "/spec/plugins/" > Plugin Architecture spec< / a > < / li >
< li > < a href = "/spec/search_sorting/" > Search Sorting spec< / a > < / li >
< li > < a href = "/spec/server_file_url_format/" > Server: File URL Format< / a > < / li >
< li > < a href = "/spec/server_delta_sync/" > Server: Delta Sync< / a > < / li >
< li > < a href = "/spec/server_sharing/" > Server: Sharing< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
< p > Google Summer of Code 2021< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/gsoc2021/index/" > Google Summer of Code 2021< / a > < / li >
< li > < a href = "/gsoc2021/pull_request_guidelines/" > How to submit a GSoC pull request< / a > < / li >
< li > < a href = "/gsoc2021/ideas/" > Project Ideas< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< li >
< p > About< / p >
< ul >
2021-07-10 12:22:31 +02:00
< li > < a href = "/changelog/" > Changelog (Desktop App)< / a > < / li >
< li > < a href = "/changelog_cli/" > Changelog (CLI App)< / a > < / li >
< li > < a href = "/changelog_server/" > Changelog (Server)< / a > < / li >
< li > < a href = "/stats/" > Stats< / a > < / li >
< li > < a href = "/donate/" > Donate< / a > < / li >
2021-05-24 01:16:43 +02:00
< / ul >
< / li >
< / ul >
2021-07-04 19:14:32 +02:00
< / div > < / div >
2021-05-24 01:16:43 +02:00
2021-07-04 19:14:32 +02:00
< div class = "main-content" >
2021-07-10 12:22:31 +02:00
< div class = "alert alert-danger alert-env-dev" role = "alert" >
2021-07-31 15:46:37 +02:00
Running in prod mode!
2021-07-10 12:22:31 +02:00
< / div >
< div class = "donate-links" >
2021-08-09 14:19:08 +02:00
< p > < a href = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted" > < img src = "https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg" alt = "Donate using PayPal" > < / a > < a href = "https://github.com/sponsors/laurent22/" > < img src = "https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg" alt = "Sponsor on GitHub" > < / a > < a href = "https://www.patreon.com/joplin" > < img src = "https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg" alt = "Become a patron" > < / a > < a href = "https://joplinapp.org/donate/#donations" > < img src = "https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-IBAN.svg" alt = "Donate using IBAN" > < / a > < / p >
2021-07-10 12:22:31 +02:00
< / div >
2021-05-24 01:16:43 +02:00
< h1 > Search Engine< a name = "search-engine" href = "#search-engine" class = "heading-anchor" > 🔗< / a > < / h1 >
< p > The Search Engine powers the Search input in the note list and the Goto Anything dialog.< / p >
< h2 > Search algorithm< a name = "search-algorithm" href = "#search-algorithm" class = "heading-anchor" > 🔗< / a > < / h2 >
< h3 > Discretely using only the most critical parameter in sorting< a name = "discretely-using-only-the-most-critical-parameter-in-sorting" href = "#discretely-using-only-the-most-critical-parameter-in-sorting" class = "heading-anchor" > 🔗< / a > < / h3 >
< p > Sorting occurs as the Search Engine processes results, after searching for and weighting these results.< / p >
< p > Parameters include fuzziness, title matching, weight (based on BM25 and age), the completed status of to-dos, and the note's age.< / p >
< p > The Search Engine uses only the first relevant parameter to determine the order, rather than a weighted average.< br >
In effect, this means search results with note title matches will appear above all results that only matched the note body,< br >
regardless of weight or other parameters.< / p >
< h3 > Determining weight as a sorting parameter< a name = "determining-weight-as-a-sorting-parameter" href = "#determining-weight-as-a-sorting-parameter" class = "heading-anchor" > 🔗< / a > < / h3 >
< p > The Search Engine determines the weight parameter using both < a href = "https://en.wikipedia.org/wiki/Okapi_BM25" > BM25< / a > < br >
and the number of days since last user update.< / p >
< h4 > BM25< a name = "bm25" href = "#bm25" class = "heading-anchor" > 🔗< / a > < / h4 >
< p > The Search Engine determines BM25 based on " term frequency-inverse document frequency." < br >
The " TF–IDF" value increases proportionally to the number of times a word appears in the document< br >
and is offset by the number of documents in the corpus that contain the word, which helps to adjust< br >
for the fact that some words appear more frequently in general.< / p >
< p > BM25 returns weight zero for a search term that occurs in more than half the notes.< br >
So terms that are abundant in all notes to have zero relevance w.r.t. BM25.< / p >
< h4 > Days since last user update< a name = "days-since-last-user-update" href = "#days-since-last-user-update" class = "heading-anchor" > 🔗< / a > < / h4 >
< p > Sorting increases the BM25 weight by the inverse number of days since the note was updated.< br >
Recent notes will, therefore, be weighted highly in the search results.< br >
This time-based weight decays logarithmically, becoming less of a factor than BM25 after months have passed.< / p >
2021-07-10 12:22:31 +02:00
< div class = "bottom-links" >
< a href = "https://github.com/laurent22/joplin/blob/dev/readme/spec/search_sorting.md" >
< i class = "fab fa-github" > < / i > Improve this doc
< / a >
< / div >
2021-07-04 19:14:32 +02:00
< / div >
< / div >
< / div >
< / div >
< footer class = "darkblue-bg" >
< div class = "container" >
< div class = "row" >
< div class = "col-3 d-none d-md-block" >
< img src = "/images/logo-text.svg" alt = "" width = "150" / >
< / div >
< / div >
< div class = "row" >
< div class = "col-12" >
< hr / >
< / div >
< / div >
< div class = "row" >
< div class = "col-12 col-md-6" >
< img
src="/ images/logo-text.svg"
width="120"
class="img-center d-block d-md-none"
alt=""
/>
< br class = "d-block d-md-none" / >
2021-07-16 18:14:56 +02:00
< p class = "text-center-sm" > Copyright © 2016-2021 Laurent Cozic< / p >
2021-07-04 19:14:32 +02:00
< / div >
< div class = "col-12 col-md-6 right-links" >
< p class = "text-right text-center-sm" >
< a href = "https://github.com/laurent22/joplin/" class = "github-link" > < i class = "fab fa-github" > < / i > GitHub Repository< / a >
< a href = "/privacy/" > Privacy Policy< / a >
< / p >
< / div >
< / div >
< / div >
< / footer >
2021-05-24 01:16:43 +02:00
< / div >
2021-08-20 12:11:35 +02:00
< script src = "/js/script.js?t=1629454276652" > < / script >
2021-05-24 01:16:43 +02:00
2021-07-10 12:22:31 +02:00
< script >
2021-07-16 18:14:56 +02:00
if (window.location.hostname !== 'localhost') {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-103586105-1', 'auto');
ga('send', 'pageview');
}
2021-07-10 12:22:31 +02:00
< / script > < / body >
2021-05-24 01:16:43 +02:00
< / html >