111 lines
6.1 KiB
HTML
111 lines
6.1 KiB
HTML
{% extends "base.html" %}
|
|
{% load static %}
|
|
{% load i18n %}
|
|
|
|
{% block title %}{% trans "Search Settings" %}{% endblock %}
|
|
|
|
{% block content %}
|
|
|
|
<h1>{% trans 'Search Settings' %}</h1>
|
|
{% blocktrans %}
|
|
Creating the best search experience is complicated and weighs heavily on your personal configuration.
|
|
Changing any of the search settings can have significant impact on the speed and quality of the results.
|
|
Search Methods, Trigrams and Full Text Search configurations are only available if you are using Postgres for your database.
|
|
{% endblocktrans %}
|
|
|
|
<br/>
|
|
<br/>
|
|
|
|
<h3>{% trans 'Search Methods' %}</h3>
|
|
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<p> {% blocktrans %}
|
|
Full text searches attempt to normalize the words provided to match common variants. For example: 'forked', 'forking', 'forks' will all normalize to 'fork'.
|
|
There are several methods available, described below, that will control how the search behavior should react when multiple words are searched.
|
|
Full technical details on how these operate can be viewed on <a href=https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES>Postgresql's website.</a>
|
|
{% endblocktrans %}</p>
|
|
<h4>{% trans 'Simple' %}</h4>
|
|
<p> {% blocktrans %}
|
|
Simple searches ignore punctuation and common words such as 'the', 'a', 'and'. And will treat separate words as required.
|
|
Searching for 'apple or flour' will return any recipe that includes both 'apple' and 'flour' anywhere in the fields that have been selected for a full text search.
|
|
{% endblocktrans %}</p>
|
|
<h4>{% trans 'Phrase' %}</h4>
|
|
<p> {% blocktrans %}
|
|
Phrase searches ignore punctuation, but will search for all of the words in the exact order provided.
|
|
Searching for 'apple or flour' will only return a recipe that includes the exact phrase 'apple or flour' in any of the fields that have been selected for a full text search.
|
|
{% endblocktrans %}</p>
|
|
<h4>{% trans 'Web' %}</h4>
|
|
<p> {% blocktrans %}
|
|
Web searches simulate functionality found on many web search sites supporting special syntax.
|
|
Placing quotes around several words will convert those words into a phrase.
|
|
'or' is recognized as searching for the word (or phrase) immediately before 'or' OR the word (or phrase) directly after.
|
|
'-' is recognized as searching for recipes that do not include the word (or phrase) that comes immediately after.
|
|
For example searching for 'apple pie' or cherry -butter will return any recipe that includes the phrase 'apple pie' or the word 'cherry'
|
|
in any field included in the full text search but exclude any recipe that has the word 'butter' in any field included.
|
|
{% endblocktrans %}</p>
|
|
<h4>{% trans 'Raw' %}</h4>
|
|
<p> {% blocktrans %}
|
|
Raw search is similar to Web except will take puncuation operators such as '|', '&' and '()'
|
|
{% endblocktrans %}</p>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<br/>
|
|
<h4>fuzzy search</h4>
|
|
<div class="card">
|
|
<div class="card-body">
|
|
{% blocktrans %}
|
|
Another approach to searching that also requires Postgresql is fuzzy search or trigram similarity. A trigram is a group of three consecutive characters.
|
|
For example searching for 'apple' will create x trigrams 'app', 'ppl', 'ple' and will create a score of how closely words match the generated trigrams.
|
|
One benefit of searching trigams is that a search for 'sandwich' will find misspelled words such as 'sandwhich' that would be missed by other methods.
|
|
{% endblocktrans %}
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<br/>
|
|
<h4>{% trans 'Search Fields' %}</h4>
|
|
|
|
<div class="card">
|
|
<div class="card-body">
|
|
{% blocktrans %}
|
|
Unaccent is a special case in that it enables searching a field 'unaccented' for each search style attempting to ignore accented values.
|
|
For example when you enable unaccent for 'Name' any search (starts with, contains, trigram) will attempt the search ignoring accented characters.
|
|
|
|
For the other options, you can enable search on any or all fields and they will be combined together with an assumed 'OR'.
|
|
For example enabling 'Name' for Starts With, 'Name' and 'Description' for Partial Match and 'Ingredients' and 'Keywords' for Full Search
|
|
and searching for 'apple' will generate a search that will return recipes that have:
|
|
- A recipe name that starts with 'apple'
|
|
- OR a recipe name that contains 'apple'
|
|
- OR a recipe description that contains 'apple'
|
|
- OR a recipe that will have a full text search match ('apple' or 'apples') in ingredients
|
|
- OR a recipe that will have a full text search match in Keywords
|
|
|
|
Combining too many fields in too many types of search can have a negative impact on performance, create duplicate results or return unexpected results.
|
|
For example, enabling fuzzy search or partial matches will interfere with web search methods.
|
|
Searching for 'apple -pie' with fuzzy search and full text search will return the recipe Apple Pie. Though it is not included in the full text results, it does match the trigram results.
|
|
{% endblocktrans %}
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<br/>
|
|
<h4>{% trans 'Search Index' %}</h4>
|
|
|
|
<div class="card">
|
|
<div class="card-body">
|
|
{% blocktrans %}
|
|
Trigram search and Full Text Search both rely on database indexes to perform effectively.
|
|
You can rebuild the indexes on all fields in the Admin page for Recipes and selecting all recipes and running 'rebuild index for selected recipes'
|
|
You can also rebuild indexes at the command line by executing the management command 'python manage.py rebuildindex'
|
|
{% endblocktrans %}
|
|
</div>
|
|
|
|
</div>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
{% endblock %}
|