案例 1:
{
"query": {
"match": {
"company_name": "DEFG"
}
}
}
案例 1 Java:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest searchRequest = new SearchRequest("company");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("company_name", "DEFG"));
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(searchResponse.toString());
案例 2:
您可以使用script_field 实现此目的。
您还需要将相同的查询传递给 if 条件。因此它将生成新字段,其中只有与您的查询匹配的地址。
{
"_source": {
"excludes": "name"
},
"query": {
"match": {
"companyaddress.address3": "smp1"
}
},
"script_fields": {
"address": {
"script": {
"lang": "painless",
"source": """
List li = new ArrayList();
if(params['_source']['companyaddress'] != null)
{
for(p in params['_source']['companyaddress'])
{
if( p.address3 == 'smp1')
li.add(p);
}
}
return li;
"""
}
}
}
}
案例 2 回应:
请查看具有与查询匹配的地址的字段标签。
{
"_index" : "company",
"_type" : "_doc",
"_id" : "101",
"_score" : 0.6548753,
"_source" : {
"companyaddress" : [
{
"address3" : "smp1",
"main_phone1" : "1"
},
{
"address3" : "chtp2",
"main_phone1" : "2"
},
{
"address3" : "gmd",
"main_phone1" : "3"
},
{
"address3" : "tste",
"main_phone1" : "4"
}
],
"company_id" : "3",
"company_name" : "DEFG"
},
"fields" : {
"address" : [
{
"address3" : "smp1",
"main_phone1" : "1"
}
]
}
}
案例 2 Java:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest searchRequest = new SearchRequest("company");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("companyaddress.address3", "smp1"));
Map<String, Object> param = new HashMap<String, Object>();
String source = "List li = new ArrayList();if(params['_source']['companyaddress'] != null){for(p in params['_source']['companyaddress']){if( p.address3 == 'smp1')li.add(p);}}return li;";
Script script = new Script(ScriptType.INLINE, "painless", source, param);
sourceBuilder.scriptField("address", script);
sourceBuilder.fetchSource(true);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(searchResponse.toString());
client.close();