我想知道硬记录查询和通过API生成的查询之间的区别?我正在使用弹性搜索API来构建一个查询。我期望得到的查询的格式如下。
{
"query": {
"bool": {
"must": [
{"match": {
"model": "IBC"
}
},{"match": {
"company.name": "Samsung"
}
}
]
}
}
}
但是我使用ElasticSearch查询生成器API得到的输出格式如下。我观察到,对于小数据集,这两个查询获得的结果完全相似。我不确定它在大型数据集中会如何表现。
{
"size": 100,
"query": {
"bool": {
"must": [
{
"match": {
"company.name": {
"query": "Samsung",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1.0
}
}
},
{
"match": {
"model": {
"query": "IBC",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}
我为生成查询而编写的代码:
Map<String,String> parametersMap = new HashMap<String,String>();
parametersMap.put("model","IBC");
parametersMap.put("company.name","Samsung");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
for(String key: parametersMap){
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(key,parametersMap.get(key);
boolQueryBuilder = boolQueryBuilder.must(matchQueryBuilder);
}
searchSourceBuilder.size(100).query(boolQueryBuilder);
String result = searchSourceBuilder.toString();
弹性搜索弹簧数据库生成的查询的默认值记录在弹簧数据弹性搜索的当前文档中,这实际上取决于您运行的弹性搜索版本。如果你真的想使用自己创建的纯查询,你可以看看这里的Query
注释
以下是一些关于在生成的查询中添加的额外属性的有用文档:
- 函数和运算符
- 模糊查询
- 匹配查询
- 术语查询