![](/img/trans.png)
[英]How to delete data based on condition from elastic search index using RestHighLevelClient in spring boot
[英]How to search data based on condition from elastic search index using RestHighLevelClient in spring boot
如何在 spring 啟動時使用 RestHighLevelClient 從彈性搜索索引中根據條件搜索數據。 對於下面的例子。
案例 1:如果我搜索“公司名稱”(例如:“DEFG”)。 我的 output 應該得到所有匹配的數據“company_name/address3”(例如:DEFG/smp1、DEFG/chtp2、DEFG/gmd、DEFG/tste)
情況 2:如果我使用“address3”(例如:“smp1”)進行搜索。我的 output 應該只是“company_name/address3(例如:”DEFG/smp1)。
"_index" : "es_52_companydetails_index",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"company_id" : "3",
"company_name" : "DEFG",
"companyaddress" : [
{
"address3" : "smp1",
"main_phone1" : "1"
},
{
"address3" : "chtp2",
"main_phone1" : "2"
},
{
"address3" : "gmd",
"main_phone1" : "3"
},
{
"address3" : "tste",
"main_phone1" : "4"
}
]
}
情況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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.