【发布时间】:2021-02-05 19:38:59
【问题描述】:
想象以下架构
{
"mappings": {
"my_mappinng": {
"dynamic": false,
"_all": { "enabled": false },
"_source": { "enabled": true },
"properties": {
"my_string": { "type": "string", "store": true, "index" : "not_analyzed" },
"my_boolean": { "type": "boolean", "store": true },
"my_long": { "type": "long", "store": true }
}
}
},
"settings" : {
"index" : {
"number_of_shards" : 9,
"number_of_replicas" : 1
}
}
}'
如果我想要一个与 my_string 、 my_boolean 和 my_long 的确切字段匹配的查询
是标准推荐
- 将字符串字段设置为“not_analyzed”以使其不被标记化
- 使用术语查询而不是匹配查询
BoolQueryBuilder query = QueryBuilders.boolQuery();
QueryBuilder my_filter = QueryBuilders.termQuery("my_string", "string_i_want_to_match");
query.should(my_filter);
BoolQueryBuilder query = QueryBuilders.boolQuery();
QueryBuilder my_filter = QueryBuilders.termQuery("my_boolean", true);
query.should(my_filter);
BoolQueryBuilder query = QueryBuilders.boolQuery();
QueryBuilder my_filter = QueryBuilders.termQuery("my_long", 1l);
query.should(my_filter);
而不是
BoolQueryBuilder query = QueryBuilders.boolQuery();
query.must(matchQuery("my_string", "string_i_want_to_match"));
BoolQueryBuilder query = QueryBuilders.boolQuery();
query.must(matchQuery("my_boolean", true));
BoolQueryBuilder query = QueryBuilders.boolQuery();
query.must(matchQuery("my_long", 1l));
这对吗?
【问题讨论】:
标签: java elasticsearch