Elasticsearch全局搜索
小于 1 分钟ElasticsearchElasticsearch
1.原理
- 使用copy_to将需要查询的参数值复制到一个属性中
- 使用wildcard关键词进行查询
2.实现
创建索引,将所有string类型的数据复制到cmp_full_name中
PUT /cmdb/ { "mappings" : { "dynamic_templates" : [ { "copy_to_full":{ "mapping": { "copy_to": "cmp_full_name" }, "match_mapping_type": "string", "unmatch":"cmp_full_name" } }, { "message_field" : { "path_match" : "message", "match_mapping_type" : "string", "mapping" : { "norms" : false, "type" : "text" } } }, { "string_fields" : { "match" : "*", "match_mapping_type" : "string", "mapping" : { "analyzer" : "simple", "norms" : false, "type" : "text" } } } ], "properties": { "cmp_full_name":{ "type": "keyword" } } } }
代码关键实现
String key = "*" + cmdbGlobalSearchQueryVo.getKeyword() + "*"; BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("cmp_full_name", key); boolQueryBuilder.should(wildcardQueryBuilder);