2016-01-11 4 views
3

Я использую рельсы и драгоценный камень algolia с хранилищем mongoid.Algolia - Поиск с условием для поиска в массиве строки

Я отправляю данные в алголию для модели Question. Один из примера док в системе Algolia является

objectID: 5691e056410213a381000000 
text: "what is #cool about your name Mr. John? #name #cool" 
asked_to: ["565571704102139759000000", "i7683yiq7r8998778346q686", "kjgusa67g87y8e7qtwe87qwe898989"] 
asked_by: "564a9b804102132465000000" 
created_at: "2016-01-10T04:38:46.201Z" 
card_url: "http://localhost:3000/cards/5691e056410213a381000000" 
answerers: [] 
has_answer: false 
requestor_count: 0 
status: "active" 
popularity_point: 0 
created_at_i: 1452400726 
_tags: ["cool", "name"] 

Я хочу, чтобы найти все эти документы, где она отвечает этим двум условиям: 1) text содержит your name 2) asked_to содержит i7683yiq7r8998778346q686

Я использую Библиотека Twitter Twitter typeahead. И Javascript мой UI, чтобы реализовать algolia поиск следующим образом:

<input class="typeahead ui-widget form-control input-md search-box tt-input" id="typeahead-algolia" placeholder="Search questions" spellcheck="false" type="text" autocomplete="off" dir="auto" style="position: relative; vertical-align: top;"> 

$(document).on('ready page:load', function() { 

    var client = algoliasearch("APPLICATION_ID", "SEARCH_KEY"); 
    var index = client.initIndex('Question'); 

    $('#typeahead-algolia').typeahead(
    { 
     hint: false, 
     highlight: true, 
     minLength: 1 
    }, 
    { 
     source: index.ttAdapter({hitsPerPage: 10}), 
     displayKey: 'text' 
    } 
).on('keyup', this, function (event) { 
    if (event.keyCode == 13) { 
     $('#typeahead-algolia').typeahead('close'); 
     window.location.href = "/?keyword="+encodeURIComponent($('#typeahead-algolia').val()); 
    } 
    }); 

    $('.typeahead').bind('typeahead:select', function(ev, suggestion) { 
    window.location.href = suggestion.card_url; 
    }); 

}); 

Так что мой вопрос:

Этот код работает отлично. Но как добавить условие для asked_to contains i7683yiq7r8998778346q686 в вышеуказанный javascript, чтобы отфильтровать результат.

ответ

4

Вы можете использовать фасетный фильтр в атрибуте asked_to в запросе.

Сначала необходимо объявить атрибут asked_to в качестве атрибута для огранки в настройках индекса, а затем передать asked_to:i7683yiq7r8998778346q686 как фасет фильтр в запросе через параметр facetFilters запроса.

Когда ваши настройки индекса изменяются, вы можете изменить свой источник, чтобы добавить параметр facetFilters:

$('#typeahead-algolia').typeahead(
    { 
     hint: false, 
     highlight: true, 
     minLength: 1 
    }, 
    { 
     source: index.ttAdapter({hitsPerPage: 10, facetFilters: "asked_to:i7683yiq7r8998778346q686"}), 
     displayKey: 'text' 
    } 
).on('keyup', this, function (event) { 
    if (event.keyCode == 13) { 
     $('#typeahead-algolia').typeahead('close'); 
     window.location.href = "/?keyword="+encodeURIComponent($('#typeahead-algolia').val()); 
    } 
}); 
+0

Благодаря @speedblue. Все хорошо сейчас! – JVK

Смежные вопросы