Там есть несколько изменений, которые вы должны сделать Во-первых, вместо имен индексов непосредственно (например, отруби-103166797), вы должны использовать AppIndexers так, что создается правильное название. В противном случае, когда вы публикуете новую версию сайта Поиска по-прежнему будет Индексацией старой версии:
var sm = applications.search.searchManager;
var indexers = sm.appIndexers;
var profileIndexer = indexers.profile;
var contentIndexer = indexers.content;
Затем вы можете использовать метод prepareSearch на SearchManager, который позволяет непосредственно управлять поиск строителем:
log.info("using indexers {} {}", profileIndexer, contentIndexer);
var builder = sm.prepareSearch(profileIndexer, contentIndexer);
builder.setSource(JSON.stringify(json));
builder.setTypes("profile", "html");
Затем вы можете выполнить поисковый запрос, используя методы API elasticsearch. Обратите внимание, что в этом примере я использую встроенные js-скрипты, а не js-контроллер, поэтому мне нужно установить результаты в атрибуте запроса, чтобы шаблон мог получить к нему доступ.
var result = builder.execute().actionGet();
log.info("result {}", result);
http.request.attributes.result = result;
Вот полный работал пример: http://docs.kademi.co/howtos/devs/advanced-search-pages-with-the-searchmanager-api.html
И источник шаблона в этом примере здесь:
<html>
<head>
<title>search page</title>
</head>
<body>
#script()
<script>
var keyword = http.request.params.q;
var json = {
"query": {
"match": {"_all":keyword}
},
"fields" : ["nickName", "title"],
"highlight": {
"fields" : {
"*" : {},
"content" : {
"type" : "plain"
}
}
}
};
var sm = applications.search.searchManager;
var indexers = sm.appIndexers;
var profileIndexer = indexers.profile;
var contentIndexer = indexers.content;
log.info("using indexers {} {}", profileIndexer, contentIndexer);
var builder = sm.prepareSearch(profileIndexer, contentIndexer);
builder.setSource(JSON.stringify(json));
builder.setTypes("profile", "html");
var result = builder.execute().actionGet();
log.info("result {}", result);
http.request.attributes.result = result; // make available to templating
</script>
#end
<div class="container">
<h1>Search</h1>
<p class="pull-right lead">Showing $request.attributes.result.hits.hits.size() of $request.attributes.result.hits.totalHits hits</p>
<table class="table table-striped">
#foreach($hit in $request.attributes.result.hits)
<tr>
<td>
$!hit.fields.nickName.value $!hit.fields.title.value
</td>
<td>$hit.type</td>
</tr>
#end
</table>
</div>
<!-- for debugging, just display the search result as json -->
<pre>$request.attributes.result</pre>
</body>
Я не сказал явно, но метод выше позволяет устанавливать типы документов на – brad