Fixed project search

The project ID wasn't used at all when searching in a project's context.
This commit is contained in:
Sybren A. Stüvel 2018-03-13 12:24:29 +01:00
parent 257793dcd5
commit df6297d40f
5 changed files with 31 additions and 32 deletions

View File

@ -55,7 +55,7 @@ def nested_bool(must: list, should: list, terms: dict, *, index_alias: str) -> S
return search return search
def do_node_search(query: str, terms: dict, page: int) -> dict: def do_node_search(query: str, terms: dict, page: int, project_id: str='') -> dict:
""" """
Given user query input and term refinements Given user query input and term refinements
search for public published nodes search for public published nodes
@ -73,6 +73,8 @@ def do_node_search(query: str, terms: dict, page: int) -> dict:
] ]
must = [] must = []
if project_id:
must.append({'term': {'project.id': project_id}})
if not query: if not query:
should = [] should = []

View File

@ -42,10 +42,11 @@ def _page_index() -> int:
@blueprint_search.route('/') @blueprint_search.route('/')
def search_nodes(): def search_nodes():
searchword = request.args.get('q', '') searchword = request.args.get('q', '')
project_id = request.args.get('project', '')
terms = _term_filters() terms = _term_filters()
page_idx = _page_index() page_idx = _page_index()
result = queries.do_node_search(searchword, terms, page_idx) result = queries.do_node_search(searchword, terms, page_idx, project_id)
return jsonify(result) return jsonify(result)

View File

@ -17,26 +17,28 @@ $(document).ready(function() {
var sliderTemplate = Hogan.compile($('#slider-template').text()); var sliderTemplate = Hogan.compile($('#slider-template').text());
var paginationTemplate = Hogan.compile($('#pagination-template').text()); var paginationTemplate = Hogan.compile($('#pagination-template').text());
// something elasticy! // defined in tutti/4_search.js
var search = elasticSearcher; var search = elasticSearcher;
// what are we looking for? users? assets (default) // what are we looking for? users? assets (default)
what = $inputField.attr('what'); what = $inputField.attr('what');
// Input binding function do_search(query) {
$inputField.on('keyup change', function() {
var query = $inputField.val();
if (query === undefined) { if (query === undefined) {
return; return;
} }
toggleIconEmptyInput(!query.trim()); toggleIconEmptyInput(!query.trim());
// what could be like "/users" search.setQuery(query, what); // what could be like "/users"
search.setQuery(query, what); var pid = ProjectUtils.projectId();
// setURLParams(search); if (pid) search.setProjectID(pid);
search.execute(); search.execute();
}
// Input binding
$inputField.on('keyup change', function() {
var query = $inputField.val();
do_search(query);
}).focus(); }).focus();
search.on('results', function(content) { search.on('results', function(content) {
@ -330,6 +332,5 @@ $(document).ready(function() {
} }
// do empty search to fill aggregations // do empty search to fill aggregations
search.setQuery('', what); do_search('');
search.execute();
}); });

View File

@ -8,6 +8,7 @@ var elasticSearcher = (function() {
var deze = { var deze = {
query:"", query:"",
project_id:"",
url:"", url:"",
newhits: [], newhits: [],
terms: {}, terms: {},
@ -21,6 +22,10 @@ var elasticSearcher = (function() {
} }
}), }),
setProjectID: (function(pid){
deze.project_id = pid;
}),
setCurrentPage: (function(page){ setCurrentPage: (function(page){
if(page === undefined){ if(page === undefined){
return; return;
@ -66,6 +71,7 @@ var elasticSearcher = (function() {
params = { params = {
q: deze.query, q: deze.query,
page: deze.page, page: deze.page,
project: deze.project_id,
}; };
//add term filters //add term filters
Object.assign(params, deze.terms); Object.assign(params, deze.terms);
@ -105,6 +111,7 @@ var elasticSearcher = (function() {
execute: deze.execute, execute: deze.execute,
on: deze.on, on: deze.on,
setQuery: deze.setQuery, setQuery: deze.setQuery,
setProjectID: deze.setProjectID,
setCurrentPage: deze.setCurrentPage, setCurrentPage: deze.setCurrentPage,
query: deze.query, query: deze.query,
page: deze.page, page: deze.page,

View File

@ -23,6 +23,10 @@ meta(name="twitter:description", content="{{project.summary}}")
| {% endblock %} | {% endblock %}
| {% block body %} | {% block body %}
| {% if project %}
script.
document.body.dataset["projectId"] = "{{project._id}}";
| {% endif %}
#search-container #search-container
@ -171,27 +175,11 @@ script(type="text/template", id="stats-template")
| {% block footer_scripts %} | {% block footer_scripts %}
script(src="//releases.flowplayer.org/6.0.5/flowplayer.min.js", async) script(src="//releases.flowplayer.org/6.0.5/flowplayer.min.js", async)
script().
var APPLICATION_ID = '{{config.ALGOLIA_USER}}';
var SEARCH_ONLY_API_KEY = '{{config.ALGOLIA_PUBLIC_KEY}}';
var INDEX_NAME = '{{config.ALGOLIA_INDEX_NODES}}';
var sortByCountDesc = null;
var FACET_CONFIG = [
{ name: 'node_type', title: 'Type', disjunctive: false, sortFunction: sortByCountDesc },
{ name: 'media', title: 'Media', disjunctive: false, sortFunction: sortByCountDesc },
{ name: 'tags', title: 'Tags', disjunctive: false, sortFunction: sortByCountDesc },
{ name: 'is_free', title: 'Free Access', disjunctive: false, sortFunction: sortByCountDesc },
];
{% if project %}
FACET_CONFIG.push({ name: 'project._id', title: 'Project', disjunctive: false, hidden: true, value: '{{project._id}}' })
{% endif %}
script(src="{{ url_for('static_pillar', filename='assets/js/vendor/hogan.common-3.0.0.js') }}") script(src="{{ url_for('static_pillar', filename='assets/js/vendor/hogan.common-3.0.0.js') }}")
script(src="{{ url_for('static_pillar', filename='assets/js/elasticsearch.min.js') }}") script(src="{{ url_for('static_pillar', filename='assets/js/elasticsearch.min.js') }}")
script(type="text/javascript"). script.
function displayNode(userId) {
function displayUser(userId) {
var url = '/nodes/' + userId + '/view'; var url = '/nodes/' + userId + '/view';
$.get(url, function(dataHtml){ $.get(url, function(dataHtml){
@ -215,7 +203,7 @@ script(type="text/javascript").
} }
$(this).find('#search-loading').addClass('active'); $(this).find('#search-loading').addClass('active');
displayUser($(this).data('hit-id')); displayNode($(this).data('hit-id'));
$('.search-hit').removeClass('active'); $('.search-hit').removeClass('active');
$(this).addClass('active'); $(this).addClass('active');
}); });