设为首页 收藏本站
查看: 649|回复: 0

[经验分享] 4:elasticsearch服务实现

[复制链接]

尚未签到

发表于 2019-1-29 07:18:47 | 显示全部楼层 |阅读模式
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.engine.DocumentMissingException;
import org.elasticsearch.index.engine.VersionConflictEngineException;

public class IIndexServiceIml implements IIndexService {
    @Override
    public boolean insertOne(SearchBean t) {
        // TODO Auto-generated method stub
        try {
            Client client = ClientHelper.getClient();
            IndexRequestBuilder inserter = client.prepareIndex(t.getIndexName(),t.getType(),t.getId());
            inserter.setSource(SearchBeanUtil.toInsertMap(t));
            inserter.execute().actionGet();
            return true;
        } catch (Exception e) {
            // TODO: handle exception
        }
        return false;
    }
    @Override
    public boolean insertList(List lists) {
        try {
            Client client = ClientHelper.getClient();
            BulkRequestBuilder bulk = new BulkRequestBuilder(client);
            for (SearchBean b : lists) {
                IndexRequestBuilder inserter = client.prepareIndex(b.getIndexName(),
                        b.getType(),b.getId());
                inserter.setSource(SearchBeanUtil.toInsertMap(b));
                bulk.add(inserter);
            }
            BulkResponse actionGet = bulk.execute().actionGet();
            if (actionGet.hasFailures()) {
                return false;
            }
            return true;
        } catch (Exception e) {
        }
        return false;
    }
    @Override
    public boolean deleteOne(SearchBean t) {
        Client client = ClientHelper.getClient();
        try {
              DeleteRequestBuilder deleter = client.prepareDelete(t.getIndexName(), t.getType(),t.getId());
              DeleteResponse actionGet = deleter.execute().actionGet();
              if (!actionGet.isFound()) {
                 return true;
              }
            } catch (Exception e) {
                return false;
            }
        return true;
    }
    @Override
    public boolean deleteList(List lists) {
        try {
            Client client = ClientHelper.getClient();
            BulkRequestBuilder bulk = new BulkRequestBuilder(client);
            for (SearchBean t : lists) {
                DeleteRequestBuilder deleter = client.prepareDelete(t.getIndexName(), t.getType(),t.getId());
                bulk.add(deleter);
            }
            BulkResponse actionGet = bulk.execute().actionGet();
            if (actionGet.hasFailures()) {
                return false;
            }
            return true;
        } catch (Exception e) {
        }
        return false;
    }
    @Override
    public boolean updateOne(SearchBean t) {
        Client client = ClientHelper.getClient();
        try {
            client.prepareUpdate(t.getIndexName(),t.getType(), t.getId())
                    .setId( t.getId()).setDoc(SearchBeanUtil.toUpdateMap(t)).execute()
                    .actionGet();
            return true;
        } catch (DocumentMissingException e) {// 文档不存在,直接返回true
            e.printStackTrace();
            return true;
        } catch (VersionConflictEngineException e) {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public boolean udateList(List lists) {
        try {
            Client client = ClientHelper.getClient();
            BulkRequestBuilder bulk = new BulkRequestBuilder(client);
            for (SearchBean t : lists) {
                UpdateRequestBuilder update=client.prepareUpdate(t.getIndexName(),t.getType(), t.getId())
                .setId( t.getId()).setDoc(SearchBeanUtil.toUpdateMap(t));
                bulk.add(update);
            }
            BulkResponse actionGet = bulk.execute().actionGet();
            if (actionGet.hasFailures()) {
                return false;
            }
            return true;
        } catch (Exception e) {
        }
        return false;
    }
    @Override
    public List search(String jsonQuery, String indexName, int page, int size) {
        try {
            int start = page < 1 ? 0 : (page - 1) * size;
            Client client = ClientHelper.getClient();
            SearchResponse response = client
                    .prepareSearch(indexName)
                    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                    .setQuery(jsonQuery).setFrom(start).setSize(size)
                    .setExplain(false).execute().actionGet();
                return SearchBeanUtil.buildSearchSource(response.getHits());
        } catch (Exception e) {
        }
        return null;
    }
    @Override
    public List searchField(String jsonQuery, String indexName, int page,int size, String... fields) {
        try {
            int start = page < 1 ? 0 : (page - 1) * size;
            Client client = ClientHelper.getClient();
            SearchRequestBuilder request = client
                    .prepareSearch(indexName)
                    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                    .setQuery(jsonQuery).setFrom(start).setSize(size);
                for (String field : fields) {
                    request.addField(field);
                }
            SearchResponse response = request.setExplain(false).execute().actionGet();
            return SearchBeanUtil.buildSearchFields(response.getHits());
        } catch (Exception e) {
        }
        return null;
    }
    @Override
    public boolean checkDocExisted(String indexName,String type,String id) {
        try {
            Client client = ClientHelper.getClient();
            GetResponse response = client
                    .prepareGet(indexName,type,id)
                    .execute().actionGet();
            boolean result = response.isExists();
            return result;
        } catch (Exception e) {
            return false;
        }
    }
    @Override
    public boolean updateFields(String id, String indexName, String type,String script, Map maps) {
        boolean fa=false;
        try {
            Client client = ClientHelper.getClient();
            UpdateRequest resuest=new UpdateRequest(indexName, type,id);
            resuest.script(script);
            resuest.scriptParams(maps);
            client.update(resuest).actionGet();
            fa=true;
        } catch (Exception e) {
            fa=false;
        }
        return fa;
    }
}

public class SearchBean {
    public SearchBean(String indexName, String type, String id) {
        super();
        this.indexName = indexName;
        this.type = type;
        this.id = id;
    }
    private String indexName;//索引名称
    private String type;//索引类型
    private String id;//索引ID
    private String name;
    private String password;
    public String getIndexName() {
        return indexName;
    }
    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

public class SearchBeanUtil {
    /**
     * 根据filedName获取get方法
     *
     * @param fildeName
     * @return
     * @throws Exception
     */
    private static String getMethodName(String fildeName) throws Exception {
        byte[] items = fildeName.getBytes();
        if (((char) items[0]) >= 'a' && ((char) items[0])  type = bean.getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(type);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors;
                String propertyName = descriptor.getName();
                if (!propertyName.equals("class")) {
                    Method readMethod = descriptor.getReadMethod();
                    Object result = readMethod.invoke(bean);
                    returnMap.put(propertyName, result);
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return returnMap;
    }
    public static List buildSearchSource(SearchHits result){
        List lists=new ArrayList();
        for(SearchHit hit:result.getHits()){
            lists.add(hit.getSource());
        }
        return lists;
    }
    public static List buildSearchFields(SearchHits result){
        List lists=new ArrayList();
        for(SearchHit hit:result.getHits()){
            Map map=new HashMap();
            for(String key:hit.getFields().keySet()){
                map.put(key, hit.getFields().get(key));
            }
            lists.add(map);
        }
        return lists;
    }
    public static void main(String[] args){
        SearchBean bean =new SearchBean("index", "user", "sss");
        Map returnMap = toUpdateMap(bean);
        System.out.println(returnMap);
    }
}  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668885-1-1.html 上篇帖子: elasticsearch学习之Pattern Tokenizer 下篇帖子: Elasticsearch Java使用错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表