古城热线 发表于 2019-1-29 07:18:47

4:elasticsearch服务实现

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) >= 'a' && ((char) items)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]
查看完整版本: 4:elasticsearch服务实现