真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

elasticsearch中java客戶端api的使用方法

1.客戶端client構(gòu)建

成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元邢臺(tái)縣做網(wǎng)站,已為上家服務(wù),為邢臺(tái)縣各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

package com.pz998.app.service.utils;

import static org.elasticsearch.common.settings.Settings.settingsBuilder;

import java.net.InetSocketAddress;

import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress;

public class SearchHelp {

private static TransportClient client = null;

public static Client getSearchClient() {    if(client!=null){        return client;    }    Settings setting = settingsBuilder()    //集群名稱            .put("cluster.name", "es-cluster")    .put("client.transport.sniff", true)    .put("client.transport.ignore_cluster_name", false)    .put("client.transport.ping_timeout", "5s")    .put("client.transport.nodes_sampler_interval", "5s")    .build();    client = TransportClient.builder().settings(setting).build();    ((TransportClient) client).addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("10.3.32.83", 9300)));    return client; } }

2.多字段檢索

public SearchResultVo queryDiseaseOrDoctor(SearchParam searchParam,Client client){     
    Integer from = searchParam.getFrom()==null?0:searchParam.getFrom(); 
    Integer size = searchParam.getPageSize()==null?0:searchParam.getPageSize(); 
    MultiSearchResponse response = client.prepareMultiSearch() 
            //搜索疾病索引 
            .add(client.prepareSearch(DISEASE_INDEX)// 檢索的目錄 
                .setSearchType(SearchType.DEFAULT)// Query type                 
                .setQuery(QueryBuilders.disMaxQuery() 
                          .add(QueryBuilders.matchQuery("name", searchParam.getKeyword())) 
                          .add(QueryBuilders.matchQuery("intro", searchParam.getKeyword()) 
                        ))     
                .addHighlightedField("name") 
                .addHighlightedField("intro") 

                .setHighlighterPreTags(FIELD_HIGHLIGHT_PRE_TAG) 
                .setHighlighterPostTags(FIELD_HIGHLIGHT_POST_TAG) 
                .setFrom(from).setSize(size).setExplain(true)) 
            //搜索醫(yī)生索引 
            .add(client.prepareSearch(DOCTOR_INDEX)// 檢索的目錄 
                    .setSearchType(SearchType.DEFAULT)// Query type                 
                    .setQuery(QueryBuilders.disMaxQuery() 
                              .add(QueryBuilders.matchQuery("name", searchParam.getKeyword())) 
                              .add(QueryBuilders.matchQuery("disease_tag", searchParam.getKeyword())) 
                              //城市 

//                                  .add(QueryBuilders.matchQuery("city", searchParam.getCity()))  
)    
.addHighlightedField("name")
.addHighlightedField("disease_tag")
.setHighlighterPreTags(FIELD_HIGHLIGHT_PRE_TAG)
.setHighlighterPostTags(FIELD_HIGHLIGHT_POST_TAG)
.setFrom(from).setSize(size).setExplain(true))
.execute().actionGet();// 執(zhí)行

            SearchResultVo searchResultVo = new SearchResultVo(); 
            List diseaseList = new ArrayList(); 
            List doctorList = new ArrayList(); 
            if(response.getResponses() != null) {  
                MultiSearchResponse.Item diseaseItem = response.getResponses().length>0?(response.getResponses())[0]:null; 
                MultiSearchResponse.Item doctorItem = response.getResponses().length>1?(response.getResponses())[1]:null; 

                if(diseaseItem!=null){ 
                    SearchResponse diseasResp = diseaseItem.getResponse(); 
                    System.out.println("命中疾病條數(shù): " + diseasResp.getHits().getTotalHits()); 

                    searchResultVo.setDiseaseTotal(diseasResp.getHits().getTotalHits()); 
                    for (SearchHit hits : diseasResp.getHits().getHits()) {             
                        Map sourceAsMap = hits.sourceAsMap(); 
                         //獲取對(duì)應(yīng)的高亮域 
                        Map result = hits.highlightFields();   

                        //從設(shè)定的高亮域中取得指定域 
                        HighlightField highlightFieldText = result.get("name");   
                        String code = (String)sourceAsMap.get("code"); 
                        HighlightField introField = result.get("intro"); 

                        String name = getHighlightFieldText(highlightFieldText); 
                        name = StringUtils.isEmpty(name)?(String)sourceAsMap.get("name"):name; 
                        String intro = getHighlightFieldText(introField); 
                        intro = StringUtils.isEmpty(intro)?(String)sourceAsMap.get("intro"):intro; 

                        BdDiseaseRpc bdDiseaseRpc = new BdDiseaseRpc(); 
                        bdDiseaseRpc.setName(name); 
                        bdDiseaseRpc.setCode(code); 
                        bdDiseaseRpc.setIntro(intro);                     
                        diseaseList.add(bdDiseaseRpc); 
                    } 

                    searchResultVo.setDiseaseList(diseaseList); 
                } 

                if(doctorItem!=null){ 
                    SearchResponse doctorResp = doctorItem.getResponse(); 
                    System.out.println("命中醫(yī)生條數(shù): " + doctorResp.getHits().getTotalHits()); 
                    searchResultVo.setDoctorTotal(doctorResp.getHits().getTotalHits()); 
                    for (SearchHit hits : doctorResp.getHits().getHits()) {             
                        Map sourceAsMap = hits.sourceAsMap(); 
                         //獲取對(duì)應(yīng)的高亮域 
                        Map result = hits.highlightFields();   
                        //從設(shè)定的高亮域中取得指定域 
                        HighlightField highlightFieldText = result.get("name");   
                        String code = (String)sourceAsMap.get("code"); 
                        HighlightField diseaseTagField = result.get("disease_tag"); 

                        String name = getHighlightFieldText(highlightFieldText); 
                        name = StringUtils.isEmpty(name)?(String)sourceAsMap.get("name"):name; 

                        String diseaseTag = getHighlightFieldText(diseaseTagField); 
                        diseaseTag = StringUtils.isEmpty(diseaseTag)?(String)sourceAsMap.get("disease_tag"):diseaseTag; 

                        BdDoctorRpc bdDoctorRpc = new BdDoctorRpc(); 
                        bdDoctorRpc.setName(name); 
                        bdDoctorRpc.setCode(code); 
                        bdDoctorRpc.setDiseaseTag(diseaseTag); 
                        doctorList.add(bdDoctorRpc); 
                    } 
                    searchResultVo.setDoctorList(doctorList); 
                } 

            } 

    return searchResultVo; 
}

以上代碼搜索疾病信息中的名字與簡(jiǎn)介,同時(shí)搜索了疾病和醫(yī)生兩個(gè)索引

設(shè)置分頁(yè)查詢

.setFrom(from).setSize(size).setExplain(true))

3高亮信息

設(shè)置高亮顯示信息首尾包裹的標(biāo)簽

public static final String FIELD_HIGHLIGHT_PRE_TAG = ""; 

public static final String FIELD_HIGHLIGHT_POST_TAG = "";

            .setHighlighterPreTags(FIELD_HIGHLIGHT_PRE_TAG) 
            .setHighlighterPostTags(FIELD_HIGHLIGHT_POST_TAG)

獲取高亮顯示的結(jié)果信息

//從設(shè)定的高亮域中取得指定域
HighlightField highlightFieldText = result.get("name");  
String code = (String)sourceAsMap.get("code");
HighlightField introField = result.get("intro");

        String highlight = getHighlightFieldText(highlightFieldText); 
        String intro = getHighlightFieldText(introField);
public String getHighlightFieldText(HighlightField highlightFieldText){ 
    if(highlightFieldText==null){ 
        return ""; 
    } 
    //取得定義的高亮標(biāo)簽 
    Text[] higlightTexts =  highlightFieldText.fragments(); 

    //為title串值增加自定義的高亮標(biāo)簽 
    String higlightText = "";   
    for(Text text : higlightTexts){     
        higlightText += text;   
    } 
    return higlightText; 
}

當(dāng)前名稱:elasticsearch中java客戶端api的使用方法
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gssgco.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部