Add support for Elasticsearch

Review Request #8209 — Created June 2, 2016 and submitted

Information

Review Board
release-3.0.x
2a24611...

Reviewers

The RB admin panel now includes settings for choosing between Whoosh
(the default) and Elasticsearch as search engines.

Set up Review Board to use Elasticsearch and was able to perform
searches after building the index.


Description From Last Updated

Let's swap these fields. The index depends on the URL. We should also increase the width of both fields. The …

chipx86chipx86

Can we make a constant on the class and then use that both here and in the SEARCH_ENGINE_CHOICES tuple?

daviddavid

'elasticsearch' imported but unused

reviewbotreviewbot

Since there's only one variable being formatted in, we can just use %s and positional-based formatting, which should shorten this …

daviddavid

How about "reviewboard"?

daviddavid

You can use the new constant(s) here, too.

daviddavid

You can use the new constant(s) here, too.

daviddavid

Add a blank line between these?

daviddavid

Hmm, this is a little weird. I think I'd prefer just attaching the change handler and then calling updateCacheFormDisplay() at …

daviddavid

This should fit on one line.

daviddavid

Same deal here.

daviddavid

'elasticsearch' imported but unused

reviewbotreviewbot

'elasticsearch' imported but unused

reviewbotreviewbot

Since these are POD constants, the variable names should be all caps. As it is where you used it I …

daviddavid

You could just make the jquery inline here rather than defining a variable and using add(): $('#row-search_results_per_page, #row-search_engine') .toggle(searchEnabled);

daviddavid

You could just make the jquery inline here rather than defining a variable.

daviddavid

You could just make the jquery inline here rather than defining a variable and using add(): $('#row-elasticsearch_index_name, #row-elasticsearch_url') .toggle(searchEnabled && …

daviddavid

There's an extra line here.

daviddavid

Something terrible has happened here with your editor. Please reindent. You can also combine the selectors into a single string …

daviddavid

Let's rename during import to search_engines, so it's clear and won't conflict in the future.

chipx86chipx86

I think something went horribly wrong with search/replace. We're now shouting WOOSH and ELASTICSEARCH in a lot of places that …

daviddavid

Missing docstring.

chipx86chipx86

'elasticsearch' imported but unused

reviewbotreviewbot

Swap these.

chipx86chipx86

Let's rename here as well.

chipx86chipx86

Missing a file docstring.

chipx86chipx86

Can we document both of these?

chipx86chipx86

Why the "WHOOSH"?

chipx86chipx86

Can be: $('#id_search_engine, #id_search_enable') .change(updateSearchFormDisplay);

daviddavid

? This isn't how it's listed in pypi.

chipx86chipx86

'elasticsearch' imported but unused

reviewbotreviewbot
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
  2. reviewboard/admin/forms.py (Diff revision 1)
     
     
    Show all issues
     'elasticsearch' imported but unused
    
  3. 
      
brennie
brennie
david
  1. 
      
  2. reviewboard/admin/forms.py (Diff revision 1)
     
     
    Show all issues

    Can we make a constant on the class and then use that both here and in the SEARCH_ENGINE_CHOICES tuple?

  3. reviewboard/admin/forms.py (Diff revision 1)
     
     
     
     
     
    Show all issues

    Since there's only one variable being formatted in, we can just use %s and positional-based formatting, which should shorten this code a bit.

  4. reviewboard/admin/siteconfig.py (Diff revision 1)
     
     
    Show all issues

    How about "reviewboard"?

  5. reviewboard/admin/siteconfig.py (Diff revision 1)
     
     
    Show all issues

    You can use the new constant(s) here, too.

  6. reviewboard/admin/siteconfig.py (Diff revision 1)
     
     
    Show all issues

    You can use the new constant(s) here, too.

  7. Show all issues

    Add a blank line between these?

  8. Show all issues

    Hmm, this is a little weird. I think I'd prefer just attaching the change handler and then calling updateCacheFormDisplay() at the end of the function.

  9. Show all issues

    This should fit on one line.

  10. Show all issues

    Same deal here.

  11. 
      
brennie
brennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: Pyflakes
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        reviewboard/search/engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        reviewboard/search/engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
  2. reviewboard/admin/forms.py (Diff revision 2)
     
     
    Show all issues
     'elasticsearch' imported but unused
    
  3. reviewboard/admin/forms.py (Diff revision 3)
     
     
    Show all issues
     'elasticsearch' imported but unused
    
  4. 
      
david
  1. 
      
  2. reviewboard/search/engines.py (Diff revision 3)
     
     
     
     
    Show all issues

    Since these are POD constants, the variable names should be all caps. As it is where you used it I mistook it for a class name.

    Probably also don't need the blank line between them.

  3. Show all issues

    You could just make the jquery inline here rather than defining a variable and using add():

    $('#row-search_results_per_page, #row-search_engine')
        .toggle(searchEnabled);
    
  4. Show all issues

    You could just make the jquery inline here rather than defining a variable.

  5. Show all issues

    You could just make the jquery inline here rather than defining a variable and using add():

    $('#row-elasticsearch_index_name, #row-elasticsearch_url')
        .toggle(searchEnabled && searchEngine === 'elasticsearch');
    
  6. Show all issues

    There's an extra line here.

  7. reviewboard/templates/admin/general_settings.html (Diff revision 3)
     
     
     
     
     
     
     
     
    Show all issues

    Something terrible has happened here with your editor. Please reindent.

    You can also combine the selectors into a single string with a comma.

  8. 
      
brennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        setup.py
        reviewboard/search/engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        setup.py
        reviewboard/search/engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
  2. reviewboard/admin/forms.py (Diff revision 4)
     
     
    Show all issues
     'elasticsearch' imported but unused
    
  3. 
      
david
  1. 
      
  2. reviewboard/admin/forms.py (Diff revision 4)
     
     
     
    Show all issues

    I think something went horribly wrong with search/replace. We're now shouting WOOSH and ELASTICSEARCH in a lot of places that we shouldn't be. Only the variable names should be all-caps.

  3. Show all issues

    Can be:

    $('#id_search_engine, #id_search_enable')
        .change(updateSearchFormDisplay);
    
  4. 
      
chipx86
  1. I think rather than hard-coding everything for Whoosh and Elasticsearch, we should do what we do for auth, hosting services, etc. and have a concept of backends that are registered as entrypoints, with config forms. It's a little more work up-front, but it makes it a lot easier down the road for us or third-parties to support additional search engines (say, AWS's search services).

    We'd still go through Haystack for all this, so any extension providing such things would need to deal with that, but we'd have our side covered when it comes to settings and configuration.

  2. Show all issues

    Let's swap these fields. The index depends on the URL.

    We should also increase the width of both fields. The URL especially.

  3. reviewboard/admin/forms.py (Diff revision 4)
     
     
    Show all issues

    Let's rename during import to search_engines, so it's clear and won't conflict in the future.

  4. reviewboard/admin/forms.py (Diff revision 4)
     
     
    Show all issues

    Missing docstring.

  5. reviewboard/admin/siteconfig.py (Diff revision 4)
     
     
     
    Show all issues

    Swap these.

  6. reviewboard/admin/siteconfig.py (Diff revision 4)
     
     
    Show all issues

    Let's rename here as well.

  7. reviewboard/search/engines.py (Diff revision 4)
     
     
    Show all issues

    Missing a file docstring.

  8. reviewboard/search/engines.py (Diff revision 4)
     
     
     
    Show all issues

    Can we document both of these?

  9. reviewboard/search/engines.py (Diff revision 4)
     
     
    Show all issues

    Why the "WHOOSH"?

  10. setup.py (Diff revision 4)
     
     
    Show all issues

    ? This isn't how it's listed in pypi.

    1. Find and replace gone wrong.

  11. 
      
brennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        reviewboard/search/search_engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/admin/siteconfig.py
        reviewboard/admin/forms.py
        reviewboard/search/search_engines.py
    
    Ignored Files:
        reviewboard/templates/admin/general_settings.html
    
    
  2. reviewboard/admin/forms.py (Diff revision 5)
     
     
    Show all issues
     'elasticsearch' imported but unused
    
  3. 
      
david
  1. This looks good to me as-is, but I agree with Christian's comment about making this more pluggable. Perhaps in a follow-up change?

  2. 
      
brennie
Review request changed
Status:
Completed
Change Summary:
Pushed to release-3.0.x (feb91a6)