我在这里想要实现的是在索引中搜索两个字段。 结构在kibana中看起来像这样:
POST arempris/emptagnames
{
"mappings" : {
"emptags":{
"properties": {
"employeeid": {
"type":"integer"
},
"tagName": {
"type": "text",
"fielddata": true,
"analyzer": "english"
}
}
}
}
}
在java中,我编写了一个代码来搜索名为“tagName”的单个字段,并以jsonArrayBuilder格式返回searchHits。
与此类似,在这种情况下,是否可以先搜索employeeid,然后返回与该employeeid关联的tagNames列表?
对于RDBMS,我的查询看起来像: 从filemetadata中选择tagNames,其中employeeid = 124,tagName就像%slip%,这是我想要使用QueryBuilder实现的。是否可以实施?
在索引中搜索单个字段的java代码是:
Client esclient = getClient();
String index = "arempris";
String type = "tags";
QueryBuilder query = QueryBuilders.matchPhrasePrefixQuery("tagName", tagName);
SearchResponse response = esclient.prepareSearch(index).setTypes(type)
.setQuery(query)
.execute().actionGet();
hits = response.getHits().getHits();
System.out.println(hits.length);
for (int i = 0; i < hits.length; i++) {
System.out.println(hits[i].getSourceAsString());
}
非常感谢您的帮助和提前感谢。
答案 0 :(得分:1)
您可以使用带有bool query
子句的must
来获得AND
行为。您可以使用term
查询获取完全匹配,并wildcard
查询like
BoolQueryBuilder query = new BoolQueryBuilder();
query.must(new WildcardQueryBuilder("tagName", "*slip*"));
query.must(new TermQueryBuilder("employeeid", 123));