搜索模板的功能,java api怎么去调用一个搜索模板
根据指定的品牌进行模板搜索
创建模板
模板名称
page_query_by_brand.mustache
模板内容
{ "from": {{from}}, "size": {{size}}, "query": { "match": { "brand.keyword": "{{brand}}" } } }
|
搜索
package com.es.core.senior;
import java.net.InetAddress; import java.util.HashMap; import java.util.Map;
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.script.ScriptType; import org.elasticsearch.script.mustache.SearchTemplateRequestBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class SearchTemplatePageQuery {
@SuppressWarnings({ "resource", "unchecked" }) public static void main(String[] args) throws Exception { Settings settings = Settings.builder() .put("cluster.name", "elasticsearch") .build();
TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
Map<String, Object> scripParams=new HashMap<String, Object>(); scripParams.put("from", 0); scripParams.put("size", 1); scripParams.put("brand", "宝马");
SearchResponse searchResponse = new SearchTemplateRequestBuilder(client) .setScript("page_query_by_brand") .setScriptType(ScriptType.FILE) .setScriptParams(scripParams) .setRequest(new SearchRequest("car_shop").types("sales")) .get() .getResponse();
for (SearchHit searchHit: searchResponse.getHits().getHits()) { System.out.println(searchHit.getSourceAsString()); }
client.close(); }
} |
搜索结果
{ "brand": "宝马", "name": "宝马320", "price": 320000, "produce_date": "2017-01-01", "sale_price": 280000, "sale_date": "2017-01-25" }
|