Víc*_*tor 3 java elasticsearch
我想使用html表单中的搜索条件为elasticsearch构建一个查询.我在html页面上有几个输入字段.例如,如果用户填写其中两个字段,我可以写:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("archivo", "archivo1"))
.must(QueryBuilders.termQuery("nombre", "documento1"));
Run Code Online (Sandbox Code Playgroud)
但是......如果用户填写我可以拥有的三个字段,该怎么办:
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("archivo", "archivo1"))
.must(QueryBuilders.termQuery("nombre", "documento1"))
.must(QueryBuilders.termQuery("third", "test"));
Run Code Online (Sandbox Code Playgroud)
有没有办法让dinamicall构建这种查询?
BoolQueryBuilder.must() 添加一个谓词,它不会取代前一个谓词.
因此,假设字段的值archivo在变量中inputArchivo,依此类推,您可以检查字段是否已填充,然后添加谓词:
BoolQueryBuilder query = QueryBuilders.boolQuery();
if(inputArchivo != null && !inputArchivo.isEmpty()) {
query.must(QueryBuilders.termQuery("archivo", inputArchivo));
}
if(inputNombre != null && !inputNombre.isEmpty()) {
query.must(QueryBuilders.termQuery("nombre", inputNombre));
}
if(inputThird != null && !inputThird.isEmpty()) {
query.must(QueryBuilders.termQuery("third", inputThird));
}
Run Code Online (Sandbox Code Playgroud)
然而,如果您不知道将会出现什么术语,您可以使用以下值迭代HashMap:
for (Map.Entry<String, Object> entry : map.entrySet()) {
query.must(QueryBuilders.termQuery(entry.getKey, entry.getValue))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2226 次 |
| 最近记录: |