kopia lustrzana https://github.com/wagtail/wagtail
Restructed search docs
rodzic
dc26d7e347
commit
70d423335a
|
@ -170,7 +170,7 @@ Reference
|
|||
|
||||
.. automethod:: search
|
||||
|
||||
See: :ref:`wagtailsearch_for_python_developers`
|
||||
See: :ref:`wagtailsearch_searching_pages`
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ In addition to the model fields provided, ``Page`` has many properties and metho
|
|||
|
||||
.. attribute:: search_fields
|
||||
|
||||
A list of fields to be indexed by the search engine. See Search docs :ref:`wagtailsearch_for_python_developers`
|
||||
A list of fields to be indexed by the search engine. See Search docs :ref:`wagtailsearch_indexing_fields`
|
||||
|
||||
.. attribute:: subpage_types
|
||||
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
|
||||
.. _editors-picks:
|
||||
|
||||
|
||||
Editor's picks
|
||||
==============
|
||||
|
||||
Editor's picks are a way of explicitly linking relevant content to search terms, so results pages can contain curated content in addition to results from the search algorithm. In a template using the search results view, editor's picks can be accessed through the variable ``query.editors_picks``. To include editor's picks in your search results template, use the following properties.
|
||||
|
||||
``query.editors_picks.all``
|
||||
This gathers all of the editor's picks objects relating to the current query, in order according to their sort order in the Wagtail admin. You can then iterate through them using a ``{% for ... %}`` loop. Each editor's pick object provides these properties:
|
||||
|
||||
``editors_pick.page``
|
||||
The page object associated with the pick. Use ``{% pageurl editors_pick.page %}`` to generate a URL or provide other properties of the page object.
|
||||
|
||||
``editors_pick.description``
|
||||
The description entered when choosing the pick, perhaps explaining why the page is relevant to the search terms.
|
||||
|
||||
Putting this all together, a block of your search results template displaying editor's picks might look like this:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% with query.editors_picks.all as editors_picks %}
|
||||
{% if editors_picks %}
|
||||
<div class="well">
|
||||
<h3>Editors picks</h3>
|
||||
<ul>
|
||||
{% for editors_pick in editors_picks %}
|
||||
<li>
|
||||
<h4>
|
||||
<a href="{% pageurl editors_pick.page %}">
|
||||
{{ editors_pick.page.title }}
|
||||
</a>
|
||||
</h4>
|
||||
<p>{{ editors_pick.description|safe }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
|
@ -1,17 +1,43 @@
|
|||
|
||||
.. _wagtailsearch:
|
||||
|
||||
|
||||
======
|
||||
Search
|
||||
======
|
||||
|
||||
Wagtail provides a comprehensive and extensible search interface. In addition, it provides ways to promote search results through "Editor's Picks." Wagtail also collects simple statistics on queries made through the search interface.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
for_python_developers
|
||||
frontend_views
|
||||
editors_picks
|
||||
indexing
|
||||
searching
|
||||
backends
|
||||
|
||||
|
||||
Indexing
|
||||
========
|
||||
|
||||
To make objects searchable, they firstly need to be added to the search index. This involves configuring the models/fields that you would like to index (this is done for you for Pages, Images and Documents) and then actually inserting them into the index.
|
||||
|
||||
See :ref:`wagtailsearch_indexing_update` for information on how to keep the objects in your search index in sync with the objects in your database.
|
||||
|
||||
If you have created some extra fields in a subclass of ``Page`` or ``Image``, you may want to add these new fields to the search index too so a users search query will match on their content. See :ref:`wagtailsearch_indexing_fields`.
|
||||
|
||||
If you have a custom model which doesn't derive from ``Page`` or ``Image`` that you would like to make searchable, see :ref:`wagtailsearch_indexing_models`.
|
||||
|
||||
|
||||
Searching
|
||||
=========
|
||||
|
||||
Wagtail provides an API for performing search queries on your models. You can also perform search queries on Django QuerySets.
|
||||
|
||||
See :ref:`wagtailsearch_searching`.
|
||||
|
||||
|
||||
Backends
|
||||
========
|
||||
|
||||
Wagtail provides two backends for storing the search index and performing search queries: Elasticsearch and the database. It's also possible to roll your own search backend.
|
||||
|
||||
See :ref:`wagtailsearch_backends`
|
||||
|
|
|
@ -1,34 +1,63 @@
|
|||
|
||||
.. _wagtailsearch_for_python_developers:
|
||||
.. _wagtailsearch_indexing:
|
||||
|
||||
|
||||
=====================
|
||||
For Python developers
|
||||
=====================
|
||||
========
|
||||
Indexing
|
||||
========
|
||||
|
||||
To make a model searchable, you'll firstly need to add it into the search index. All pages, images and documents are indexed for you and you can start searching them right away.
|
||||
|
||||
If you have created some extra fields in a subclass of Page or Image, you may want to add these new fields to the search index too so a users search query will match on their content. See :ref:`wagtailsearch_indexing_fields` for info on how to do this.
|
||||
|
||||
If you have a custom model that you would like to make searchable, see :ref:`wagtailsearch_indexing_models`.
|
||||
|
||||
|
||||
Basic usage
|
||||
===========
|
||||
|
||||
By default using the :ref:`wagtailsearch_backends_database`, Wagtail's search will only index the ``title`` field of pages.
|
||||
|
||||
All searches are performed on Django QuerySets. Wagtail provides a ``search`` method on the queryset for all page models:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Search future EventPages
|
||||
>>> from wagtail.wagtailcore.models import EventPage
|
||||
>>> EventPage.objects.filter(date__gt=timezone.now()).search("Hello world!")
|
||||
.. _wagtailsearch_indexing_update:
|
||||
|
||||
|
||||
All methods of ``PageQuerySet`` are supported by wagtailsearch:
|
||||
Updating the index
|
||||
==================
|
||||
|
||||
.. code-block:: python
|
||||
If the search index is kept separate from the database (when using Elasticsearch for example), you need to keep them both in sync. Theres two ways to do this: using the search signal handlers or calling the ``update_index`` command periodically. For best speed and reliability, it's best to use both if possible.
|
||||
|
||||
# Search all live EventPages that are under the events index
|
||||
>>> EventPage.objects.live().descendant_of(events_index).search("Event")
|
||||
[<EventPage: Event 1>, <EventPage: Event 2>]
|
||||
|
||||
Signal handlers
|
||||
---------------
|
||||
|
||||
Wagtailsearch provides some signal handlers which bind to the save/delete signals of all indexed models. This would add and delete them from all backends you have registered in ``WAGTAILSEARCH_BACKENDS`` automatically.
|
||||
|
||||
To register the signal handlers, add the following code somewhere it would be executed at startup. We reccommend adding this to your projects ``urls.py``:
|
||||
|
||||
.. code-block: python
|
||||
|
||||
# urls.py
|
||||
from wagtail.wagtailsearch.signal_handlers import register_signal_handlers
|
||||
|
||||
register_signal_handlers()
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
If your project was made with the ``wagtail start`` command, this should already be set up for you.
|
||||
|
||||
|
||||
The ``update_index`` command
|
||||
----------------------------
|
||||
|
||||
Wagtail also provides a command for rebuilding the index from scratch.
|
||||
|
||||
:code:`./manage.py update_index`
|
||||
|
||||
It is recommended to run this command once a week and at the following times:
|
||||
|
||||
- whenever any pages have been created through a script (after an import, for example)
|
||||
- whenever any changes have been made to models or search configuration
|
||||
|
||||
The search may not return any results while this command is running, so avoid running it at peak times.
|
||||
|
||||
|
||||
.. _wagtailsearch_indexing_fields:
|
||||
|
||||
Indexing extra fields
|
||||
=====================
|
||||
|
@ -51,7 +80,7 @@ Fields must be explicitly added to the ``search_fields`` property of your ``Page
|
|||
|
||||
|
||||
Example
|
||||
-------------
|
||||
-------
|
||||
|
||||
This creates an ``EventPage`` model with two fields ``description`` and ``date``. ``description`` is indexed as a ``SearchField`` and ``date`` is indexed as a ``FilterField``
|
||||
|
||||
|
@ -75,7 +104,7 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date``
|
|||
|
||||
|
||||
``index.SearchField``
|
||||
-----------------------
|
||||
---------------------
|
||||
|
||||
These are added to the search index and are used for performing full-text searches on your models. These would usually be text fields.
|
||||
|
||||
|
@ -89,7 +118,7 @@ Options
|
|||
|
||||
|
||||
``index.FilterField``
|
||||
-----------------------
|
||||
---------------------
|
||||
|
||||
These are added to the search index but are not used for full-text searches. Instead, they allow you to run filters on your search results.
|
||||
|
||||
|
@ -128,6 +157,8 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica
|
|||
)
|
||||
|
||||
|
||||
.. _wagtailsearch_indexing_models:
|
||||
|
||||
Indexing non-page models
|
||||
========================
|
||||
|
|
@ -1,4 +1,67 @@
|
|||
|
||||
.. _wagtailsearch_searching:
|
||||
|
||||
|
||||
=========
|
||||
Searching
|
||||
=========
|
||||
|
||||
|
||||
.. _wagtailsearch_searching_pages:
|
||||
|
||||
Searching Pages
|
||||
===============
|
||||
|
||||
Wagtail provides a ``search`` method on the QuerySet for all page models:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Search future EventPages
|
||||
>>> from wagtail.wagtailcore.models import EventPage
|
||||
>>> EventPage.objects.filter(date__gt=timezone.now()).search("Hello world!")
|
||||
|
||||
|
||||
All methods of ``PageQuerySet`` are supported by wagtailsearch:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Search all live EventPages that are under the events index
|
||||
>>> EventPage.objects.live().descendant_of(events_index).search("Event")
|
||||
[<EventPage: Event 1>, <EventPage: Event 2>]
|
||||
|
||||
|
||||
Searching Images, Documents and custom models
|
||||
=============================================
|
||||
|
||||
You can search these by using the ``search`` method on the search backend:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from wagtail.wagtailimages.models import Image
|
||||
>>> from wagtail.wagtailsearch.backends import get_search_backend
|
||||
|
||||
# Search images
|
||||
>>> s = get_search_backend()
|
||||
>>> s.search("Hello", Image)
|
||||
[<Image: Hello>, <Image: Hello world!>]
|
||||
|
||||
|
||||
You can also pass a QuerySet into the ``search`` method which allows you to add filters to your search results:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> from wagtail.wagtailimages.models import Image
|
||||
>>> from wagtail.wagtailsearch.backends import get_search_backend
|
||||
|
||||
# Search images
|
||||
>>> s = get_search_backend()
|
||||
>>> s.search("Hello", Image.objects.filter(uploaded_by_user=user))
|
||||
[<Image: Hello>]
|
||||
|
||||
|
||||
This should work the same way for Documents and custom models as well.
|
||||
|
||||
|
||||
.. _wagtailsearch_frontend_views:
|
||||
|
||||
|
||||
|
@ -166,4 +229,47 @@ In this template, you'll have access to the same context variables provided to t
|
|||
Custom Search Views
|
||||
-------------------
|
||||
|
||||
This functionality is still under active development to provide a streamlined interface, but take a look at ``wagtail/wagtail/wagtailsearch/views/frontend.py`` if you are interested in coding custom search views.
|
||||
This functionality is still under active development to provide a streamlined interface, but take a look at ``wagtail/wagtail/wagtailsearch/views/frontend.py`` if you are interested in coding custom search views.
|
||||
|
||||
|
||||
|
||||
.. _editors-picks:
|
||||
|
||||
|
||||
Editor's picks
|
||||
==============
|
||||
|
||||
Editor's picks are a way of explicitly linking relevant content to search terms, so results pages can contain curated content in addition to results from the search algorithm. In a template using the search results view, editor's picks can be accessed through the variable ``query.editors_picks``. To include editor's picks in your search results template, use the following properties.
|
||||
|
||||
``query.editors_picks.all``
|
||||
This gathers all of the editor's picks objects relating to the current query, in order according to their sort order in the Wagtail admin. You can then iterate through them using a ``{% for ... %}`` loop. Each editor's pick object provides these properties:
|
||||
|
||||
``editors_pick.page``
|
||||
The page object associated with the pick. Use ``{% pageurl editors_pick.page %}`` to generate a URL or provide other properties of the page object.
|
||||
|
||||
``editors_pick.description``
|
||||
The description entered when choosing the pick, perhaps explaining why the page is relevant to the search terms.
|
||||
|
||||
Putting this all together, a block of your search results template displaying editor's picks might look like this:
|
||||
|
||||
.. code-block:: django
|
||||
|
||||
{% with query.editors_picks.all as editors_picks %}
|
||||
{% if editors_picks %}
|
||||
<div class="well">
|
||||
<h3>Editors picks</h3>
|
||||
<ul>
|
||||
{% for editors_pick in editors_picks %}
|
||||
<li>
|
||||
<h4>
|
||||
<a href="{% pageurl editors_pick.page %}">
|
||||
{{ editors_pick.page.title }}
|
||||
</a>
|
||||
</h4>
|
||||
<p>{{ editors_pick.description|safe }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
Ładowanie…
Reference in New Issue