Metadata-Version: 2.1
Name: wagtail-extendedsearch
Version: 1.0.6
Summary: Add some more functionality to the wagtail elasticsearch search backend
Home-page: https://github.com/specialunderwear/wagtail-extendedsearch
Author: Lars van de Kerkhof
Author-email: no@way.why
License: GPL v2.1
Platform: UNKNOWN
Requires-Dist: setuptools
Requires-Dist: wagtail
Provides-Extra: test


About wagtail-extendedsearch
============================

Add some more functionality to the wagtail elasticsearch search backend

This plugin adds search capabilities through elasticsearch.
Elasticsearch provides scored search results, facetting, suggestions and
autocomplete.

Features
--------

- filter on fields that are not in the database
- order on fields that are not in the database
- search suggestions when no results are found

This readme is far from done and complete, take care.

Configuration
-------------

- ``WAGTAILSEARCHEXTENSION_NUM_SUGGESTIONS``: Number of suggestions to offer
- ``WAGTAILSEARCHEXTENSION_BOOSTED_FIELDS``: Fields to be boosted
- ``WAGTAILSEARCHEXTENSION_FACET_BUCKET_SIZE``: How many items to allow in a bucket
- ``WAGTAILSEARCHEXTENSION_PAGE_SIZE``: How many items to retrieve from elasticsearc in one go.
- ``WAGTAILSEARCHEXTENSION_MULTIMATCH_TYPE``: How should the score be calculated in a multimatch query
- ``WAGTAILSEARCHEXTENSION_DEFAULT_OPERATOR``: Should all the search terms be present or just one of the search terms? (default=or) change to and if all the search terms should be present.

Facet types
+++++++++++

Facets can be configured using the get_facets classmethod.
This is a list of dictionaries that must look like this::

    [
        {
          "label": "Brand",
          "name": "brand",
          "type": "term",
        }
    ]

Currently 2 facet types are supported
1. ``term``, facets are treated as keywords and counted and matched as such.
2. ``range``, facets are treated as integer ranges, the ``ranges`` parameter must de defined for type range. It can be used to segment the range, eg. ``[10, 100, 100]`` will yield 4 filters ranges, 0-9, 10-99, 100-999 and 1000+

Facet ordering
++++++++++++++

The default ordering for facets is alphnumerically  (``{"-key", "asc"}``).
The number of facets returned can be changed with the ocyan parameter ``facet_bucket_size``.
By default only 10 facets will be returned. If there are a lot more facets then
10 and you do not want to increase the number of facets it can make a lot of sense
to order by the number of occurrences, this will select the most useful facets.
The ordering can be changed in the facet definition::

    {
      "label": "Brand",
      "name": "brand",
      "type": "term",
      "order": { "_count" : "desc" }
    }

Now the most popular brands will be shown.
For more info, please read https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-order

Boosting fields
+++++++++++++++

Boosting field relevance is done by using the WAGTAILSEARCHEXTENSION_BOOSTED_FIELDS
setting::

    "boosted_fields": {
      "upc": 888,
      "title": 777
    }


Tweaking the mapping
--------------------
You can override/extend the elasticsearch settings by using the ELASTICSEARCH_EXTRA_SETTINGS setting

For example::

    WAGTAILSEARCHEXTENSION_ELASTICSEARCH_EXTRA_SETTINGS = {
        'settings': {
            'analysis': {
                'analyzer': {
                    'custom_analyzer': {
                      'type': 'custom',
                      'tokenizer': 'custom_tokenizer',
                      'filter': ['asciifolding', 'ngram']
                    }
                },
                'tokenizer': {
                    'custom_tokenizer': {
                        'type': 'nGram',
                        'min_gram': 3,
                        'max_gram': 15
                    }
                }
            }
        }
    }



