ealsticsearch多条件查询
2015-07-06 10:12
387 查看
前段时间在做多条件检索的时间遇到了一些问题,不晓得怎么构建多条件查询,跟solr有些不同,一开始是使用QueryBuider,可是发现不行,废话不多说了,直接贴代码:以下代码是动态构建查询语句:
private SearchRequestBuilder dynamicSearch(String index, String type, String startTime, String endTime, String status, String title, String city, String resOfficer, int pageIndex, int pageCapacity) { SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index) .setTypes(type) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setPostFilter(FilterBuilders.rangeFilter("start_time").from(startTime).to(endTime)) .setFrom(pageIndex).setSize(pageCapacity) .setExplain(true); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); queryBuilder.mustNot(QueryBuilders.matchQuery("site", "www.huodongxing.com")); //活动名称 if (!StringUtils.isEmpty(title)) { queryBuilder.must(QueryBuilders.queryString(title).field("title")); } //城市 if (!StringUtils.isEmpty(city)) { queryBuilder.must(termQuery("city", city)); } //业务状态 if (!StringUtils.isEmpty(status)) { if (status.equals(BusinessStatus.REJECTED.getCode()) || status.equals(BusinessStatus.COOPERATED.getCode())) { queryBuilder.must(termQuery("bus_status", status)); } } //负责人 if (!StringUtils.isEmpty(resOfficer)) { queryBuilder.must(queryString(resOfficer).field("resOfficer")); } if (StringUtils.isEmpty(title) && StringUtils.isEmpty(city) && StringUtils.isEmpty(status) && StringUtils.isEmpty(resOfficer)) { searchRequestBuilder.setQuery(matchAllQuery()); } searchRequestBuilder.setQuery(queryBuilder); return searchRequestBuilder; } }index 参数为elasticsearch的index,
type 为elasticsearch的type,这两个值是相当重要的。千万不能写错了哦。
然后直接调用
//start为页索引,length为页容量,其它参数为查询条件。
SearchRequestBuilder searchRequestBuilder = dynamicSearch(esIndex, esType, startTime, endTime, businessState, title, city, resOfficer, start, length);
SearchResponse response = searchRequestBuilder.execute().actionGet();
以下就是循环取数据了,网上都可以查到,少了一个构建Client的方法。补上:
import org.elasticsearch.ElasticsearchException;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.ImmutableSettings;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** Created by lixiaopeng on 2015/6/25.*/public class ESUtils {private static final Logger logger = LoggerFactory.getLogger(ESUtils.class);private static Client client;private static PropUtil prop = PropUtil.getInstance("/global.properties");static String IP = prop.getProperties().get("esIP").toString();static int port = Integer.valueOf(prop.getProperties().get("esPort").toString());public static Client getClient() {try {// Settings settings = ImmutableSettings.settingsBuilder()// .put("cluster.name", "accu-elasticsearch").build();Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "behavior").build();client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(IP, port));} catch (ElasticsearchException e) {e.printStackTrace();logger.error("open elasticsearch client failure");}return client;}public static void closeClient(){client.close();}}
相关文章推荐
- 桥接模式
- 软考路(3)——数据流图的尖
- Oracle11g用户密码过期
- 移动端高清、多屏适配方案 (转)
- 2015.7.3——股市第一原则:不心存侥幸、确保资金安全
- 瀑布流+图片缩放+一个小问题
- touch gesture 事件在移动端的简单实现
- 如何定位Android NDK开发中遇到的错误
- canvas连线
- eclipse search打开第二个文件时 第一个文件就自己关闭了
- php基础
- Power of Two
- 计算二进制数的0的个数
- 移动终端基带芯片的基本架构介绍之一(arm框架的软硬件组合)
- win8系统改装win7系统
- 如何画出一个表达式的树形结构
- iOS 原生SQLite 的使用
- win8系统安装时显示已找到设备驱动软件,但试图安装时遇到错误,怎么办?
- 微信公众平台消息接口开发之微信浏览器HTTP_USER_AGENT判断
- java泛型