1 2 3 4 5 6 | GET /es_info/_search { "query": { "match_all": {} } } |
分类: ElasticSearch
ElasticSearch: 获取索引结构
ElasticSearch: 搜索时注意类型匹配
假设索引中存在如下字段,其值为double类型(默认值为: 0.0):
1 2 3 | "speed" : { "type" : "keyword" } |
在搜索时应该写成如下格式(搜索条件为: 0.0 ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | GET /es_info/_search { "query": { "bool": { "must": [ {"term": { "phone": "13906666666" }}, {"term": { "speed": 0.0 }} ] } } } |
Java:
1 2 3 | BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); queryBuilder.must(QueryBuilders.termQuery("phone", "13906666666")); queryBuilder.must(QueryBuilders.termQuery("speed", 0.0)); |
ElasticSearch: 脚本搜索
time的类型为:
1 2 3 4 | "time" : { "type" : "date", "format" : "date_hour_minute_second" } |
Kibana的开发工具中:
1 2 3 4 5 6 7 8 9 10 11 12 | GET /es_info/_search { "query": { "script": { "script": { "source": "doc['time'].value.getHour() >= 0 && doc['time'].value.getHour() <= 6", "lang": "painless" }, "boost": 1.0 } } } |
Java代码(依赖: spring-data-elasticsearch):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder().withFields("id", "time"); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); // 判断时间范围. Map<String, Object> paramMap = new HashMap<>(2); paramMap.put("startHour", 0); paramMap.put("endHour", 6); Script script = new Script( ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, "doc['time'].value.getHour() >= params.startHour && doc['time'].value.getHour() <= params.endHour", paramMap); queryBuilder.must(QueryBuilders.scriptQuery(script)); Query query = nativeSearchQueryBuilder .withQuery(queryBuilder) .build(); |