searchkick - Autocomplete with multiple attributes

后端 未结 2 1765
盖世英雄少女心
盖世英雄少女心 2020-12-21 11:26

Autocomplete works ok when searching with a single attribute as given here.

Autocomplete with multiple attributes such as (name,city,country) is possible through->(a

相关标签:
2条回答
  • 2020-12-21 12:00

    You need to return a hash

    Your autocomplete action in doctors controller need to look like this :

    def autocomplete
      render json: Doctor.search(params[:query], autocomplete: true, limit: 10).map do |doctor| { name: doctor.name, city: doctor.city, country: doctor.country }
      end
    end
    

    Add displayKey in your typeahead option:

    $( function () {
       $("#search").typeahead({
        name: "doctor",
        displayKey: 'name',
        remote: "/doctors/autocomplete?query=%QUERY"
      });
    });
    

    You can also read this article and see if it helps.

    0 讨论(0)
  • 2020-12-21 12:01

    Based on the above answer and this and this
    What worked is shown below:

    def autocomplete
        names = Doctor.search(params[:query], fields: [{name: :text_start}], limit: 10).map {|Doctor| {store: doctor.name, value: doctor.id}}
        collegenames = Doctor.search(params[:query], fields: [{collegename: :text_start}], limit: 10).map {|Doctor| {store: doctor.collegename, value: doctor.id}}
        render json: (names + collegenames)
    
    end
    

    The variable store: now contains all the data.
    Javascript:

    var ready;
    ready = function() {
        console.log("dfdf")
        var numbers = new Bloodhound({
          datumTokenizer: function(d) {
                console.log(d);
                return Bloodhound.tokenizers.whitespace('value');
            },
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            remote: {
                url:"/doctors/autocomplete?query=%QUERY"
            }
    
    
            });
    
            // initialize the bloodhound suggestion engine
    
            var promise = numbers.initialize();
    
            promise
            .done(function() { console.log('success!'); })
            .fail(function() { console.log('err!'); });
    
            // instantiate the typeahead UI
            $('.typeahead').typeahead(null, {
              displayKey: 'store',
              source: numbers.ttAdapter()
            });
    }
    
    $(document).ready(ready);
    $(document).on('page:load', ready);
    

    Autocomplete works great on both fields however now i get an empty array on writing a url like

    http://localhost:3000/doctors/autocomplete?query="a"
    
    0 讨论(0)
提交回复
热议问题