进阶-第86__熟练掌握ES Java API_基于search template实现按品牌分页查询模板

 

搜索模板的功能,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"

}

 

 

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/88706220
今日推荐