Java ElasticSearch MultiMatchQuery具有条件的对象列表上的匹配值
我有一个索引,其中对象包含对象数组:Java ElasticSearch MultiMatchQuery具有条件的对象列表上的匹配值,java,
elasticsearch,resthighlevelclient,Java,
elasticsearch,Resthighlevelclient,我有一个索引,其中对象包含对象数组: { "id": "someID", "tags": [], "people": [ { "id": "userID", "role": "roleTARGET1", "firstName": "name",
{
"id": "someID",
"tags": [],
"people": [
{
"id": "userID",
"role": "roleTARGET1",
"firstName": "name",
"lastName": "lastname",
"fullName": "fullname"
},
{
"id": "userID",
"role": "role",
"firstName": "name",
"lastName": "lastname",
"fullName": "fullname"
},
{
"id": "userID",
"role": "roleTARGET2",
"firstName": "name",
"lastName": "lastname",
"fullName": "fullname"
}
],
"importantPerson": {
"id": "userID",
"role": "role",
"firstName": "name",
"lastName": "lastname",
"fullName": "fullname"
},
"highlightedFields": {}
}
我的查询需要的工作方式是:
- 如果重要人物对象不是空的,则匹配(字符串匹配)重要人物的全名
- 如果重要人物为空,则将“人物”数组中人物的全名与roles=“roleTARGET1”或“roleTARGET2”匹配(字符串匹配)
private void addSearchQuery(BoolQueryBuilder query, List<Filter> filters) {
String value = filters.get(0).getValues().get(0).getValue();
String[] fields = new String[filters.size()];
int i = 0;
for (Filter filter : filters) {
fields[i] = filter.getPath();
i++;
}
addMultiMatchQuery(query, fields, value);
}
private void addMultiMatchQuery(BoolQueryBuilder query, String[] fields, String value) {
query.filter(QueryBuilders.multiMatchQuery(value, fields).operator(Operator.AND).type(MultiMatchQueryBuilder.Type.BOOL_PREFIX));
}
private void addSearchQuery(BoolQueryBuilder查询,列表过滤器){
字符串值=过滤器.get(0).getValues().get(0).getValue();
String[]fields=新字符串[filters.size()];
int i=0;
用于(过滤器:过滤器){
字段[i]=filter.getPath();
i++;
}
addMultiMatchQuery(查询、字段、值);
}
私有void addMultiMatchQuery(BoolQueryBuilder查询,字符串[]字段,字符串值){
filter(QueryBuilders.multiMatchQuery(值、字段).operator(运算符.AND).type(MultiMatchQueryBuilder.type.BOOL_前缀));
}
你知道我怎样才能做到这一点吗
无论是java代码还是查询都将不胜感激
谢谢
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": {
"match": {"importantPerson.fullName": "fullname"}
}
}
},
{
"bool": {
"must": [
{"term": {"importantPerson.fullName": ""}},
{
"bool":{
"should":[
{
"term":{
"people.role":"roleTARGET1"
}
},
{
"term":{
"people.role":"roleTARGET2"
}
}
]
}
}
]
}
}
]
}
}
}
它确实应该或者=应该
(重要人员的全名
匹配
或
{
对象为空
AND
`OR = role a or b`
}
}您是在寻找
java代码
还是mongo查询
,如果您愿意,我们将不胜感激