Changed how and what we store in elastic to unify it with how we store things in mongodb so we can have more generic javascript code to render the data. Elastic changes: Added: Node.project.url Altered to store id instead of url Node.picture Made Post searchable ./manage.py elastic reset_index ./manage.py elastic reindex Thanks to Pablo and Sybren
58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
import {SearchParams} from './SearchParams';
|
|
|
|
export class MultiSearch {
|
|
constructor(kwargs) {
|
|
this.uiUrl = kwargs['uiUrl']; // Url for advanced search
|
|
this.apiUrl = kwargs['apiUrl']; // Url for api calls
|
|
this.searchParams = MultiSearch.createMultiSearchParams(kwargs['searchParams']);
|
|
this.q = '';
|
|
}
|
|
|
|
setSearchWord(q) {
|
|
this.q = q;
|
|
this.searchParams.forEach((qsParam) => {
|
|
qsParam.setSearchWord(q);
|
|
});
|
|
}
|
|
|
|
getSearchUrl() {
|
|
return this.uiUrl + '?q=' + this.q;
|
|
}
|
|
|
|
getAllParams() {
|
|
let retval = $.map(this.searchParams, (msParams) => {
|
|
return msParams.params;
|
|
});
|
|
return retval;
|
|
}
|
|
|
|
parseResult(rawResult) {
|
|
return $.map(rawResult, (subResult, index) => {
|
|
let name = this.searchParams[index].name;
|
|
let pStr = this.searchParams[index].getParamStr();
|
|
let result = $.map(subResult.hits.hits, (hit) => {
|
|
return hit._source;
|
|
});
|
|
return {
|
|
name: name,
|
|
url: this.uiUrl + '?' + pStr,
|
|
result: result,
|
|
hasResults: !!result.length
|
|
};
|
|
});
|
|
}
|
|
|
|
thenExecute() {
|
|
let data = JSON.stringify(this.getAllParams());
|
|
let rawAjax = $.getJSON(this.apiUrl, data);
|
|
let prettyPromise = rawAjax.then(this.parseResult.bind(this));
|
|
prettyPromise['abort'] = rawAjax.abort.bind(rawAjax); // Hack to be able to abort the promise down the road
|
|
return prettyPromise;
|
|
}
|
|
|
|
static createMultiSearchParams(argsList) {
|
|
return $.map(argsList, (args) => {
|
|
return new SearchParams(args);
|
|
});
|
|
}
|
|
} |