我有一个索引,其中对象内部有对象数组:
{
"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": {}
}
我的查询需要工作的方式是:
- 如果重要人物对象不为空,则匹配(字符串匹配)重要人物的全名。
- 如果重要人物为空,则匹配(字符串匹配)“people”数组中人物的全名,角色为“roleTARGET1”或“roleTARGET2”
我在想某种异或结构可以在这种情况下工作。
我解析和生成查询的方式是通过 Java 中的 RestHighLevelClient,这是一个片段:
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));
}
关于我如何做到这一点的任何想法?
java代码或查询将不胜感激。
谢谢!