java实现 elasticsearch es 的单个条件查询和多个条件查询,根据id更新指定字段

先注入

@Autowired
private RestHighLevelClient restHighLevelClient;

1:ES根据单个条件查询

public String searchEsAttachmentsLink(String riskId,String dataFrom){
try {
//添加条件,
    SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource()
            .size(1)
            .query(QueryBuilders.termQuery( name: "字段", 值));
//拼装
    SearchRequest searchRequest = new SearchRequest()
        .indices(索引)
        .source(searchSourceBuilder);
//用ESClient执行search,得到响应结果
    SearchResponse searchResponse =         
    restHighLevelClient.search(searchRequest,RequestOption.DEFAULT);
//根据自己返回的数据格式取值
    SearchHit[] hits = searchResponse.getHits().getHits();
    for (SearchHit hit : hits) {
//取值
        hit.getSourceAsMap().get("字段");
    }
    

       return null;
}

2:ES根据多个条件查询

BoolOueryBuilder boolOueryBuilder = new BoolOueryBuilder();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//用must拼接where条件
boolQueryBuilder.must(QueryBuilders.termQuery("字段","值"))
                .must(QueryBuilders.termQuery("字段","值");
SearchRequest searchRequest = new SearchRequest()
            .indices(索引)
            .source(searchSourceBuilder);
searchSourceBuilder.query(boolQueryBuilder);
log.info("拼接后的请求参数: ",searchRequest);
SearchResponse searchResponse = restHighLevelclient.search(searchRequest,RequestOptions .DEFAULT) ;
log.info("查询后的结果: ",searchResponse);
//取值
SearchHitl] hits = searchResponse.getHits() .getHits();

3:ES根据id,局部更新文档

UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index(索引);
updateRequest.type("_doc");
updateRequest.id(id);
//添加where条件
updateRequest.doc(
        XContentFactory.jsonBuilder(
                .startobject()
                .field( "字段", "值")
                .field( "字段", "值")
                .endobject()
    );
//执行
String resultUpdate = restHighlevelClient.update(updateRequest, Request0ptions.DEFAULT).getResult().tostring();

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 在ESElasticsearch)中,可以通过使用多个模糊查询实现Java中进行搜索。 首先,需要使用JavaElasticsearch客户端连接到ES集群。然后,可以使用ES的多个模糊查询功能来执行搜索操作。 在ES中,可以使用Fuzzy Query(模糊查询)来进行基于相似度的搜索。该查询可以根据指定的编辑距离(可以理解为字符串之间的差异程度)来匹配相关的文档或字段。 在Java中,可以使用ESJava API来构建Fuzzy Query。首先,需要创建一个FuzzyQueryBuilder对象,并设置模糊查询字段和关键词。然后,可以设置模糊查询的参数,例如编辑距离和前缀长度。 接下来,可以使用JavaES客户端的搜索方法执行模糊查询。该方法将查询对象作为参数传入,并返回匹配的结果。 例如,假设我们想要在名为"products"的索引的"name"字段查询包含模糊关键词"java"的文档。我们可以使用以下代码来实现: ``` import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.FuzzyQueryBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"))); FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name", "java") .fuzziness(Fuzziness.AUTO) .prefixLength(0); SearchRequest searchRequest = new SearchRequest("products"); searchRequest.source().query(fuzzyQuery); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHit[] searchHits = searchResponse.getHits().getHits(); for (SearchHit searchHit : searchHits) { Map<String, Object> sourceMap = searchHit.getSourceAsMap(); System.out.println(sourceMap); // 打印匹配结果 } client.close(); ``` 以上代码演示了如何使用ESJava API进行多个模糊查询。首先,创建了一个FuzzyQueryBuilder对象来设置模糊查询字段和关键词。然后,创建了一个SearchRequest对象来指定要搜索的索引和查询条件。最后,通过调用JavaES客户端的search方法执行搜索,并遍历匹配的结果进行处理。 总结起来,ES提供了多个模糊查询的功能,可以通过ESJava API在Java中进行实现。使用FuzzyQueryBuilder可以构建模糊查询,并通过JavaES客户端执行搜索操作。 ### 回答2: ESElasticsearch)是一个开源的分布式搜索和分析引擎,可以提供快速的全文搜索、实时数据分析以及多维度的数据聚合功能。Java是一种面向对象的编程语言,也是ES的官方支持的编程语言之一。 在ES中进行多个模糊查询,可以通过使用模糊查询语法和多个查询组合来实现ES提供了多种查询方式,包括基于词项匹配的查询(match query)、基于短语匹配的查询(match_phrase query)、基于通配符的查询(wildcard query)等。 对于模糊查询,可以使用通配符查询实现模糊匹配。通配符查询支持使用通配符(*)表示任意多个字符,以及问号(?)表示单个字符。例如,可以使用通配符查询查询包含特定字符序列的文档。 另外,在ES中还可以使用模糊查询对文本进行近似匹配。模糊查询在匹配时会考虑到文本之间的相似性,可以通过设置模糊度参数(fuzziness)来调整近似匹配的程度。 Java作为ES官方支持的编程语言之一,可以使用Java API来进行ES的多个模糊查询。通过使用Java API,可以编写Java代码来构建和执行多个模糊查询,并获得查询结果。 总之,ES是一个强大的搜索和分析引擎,通过使用多个模糊查询可以实现对文本进行模糊匹配和近似匹配。Java作为ES的官方支持的编程语言之一,可以使用Java API来进行ES的多个模糊查询。同时,ES提供了丰富的查询方式和语法,可以根据需求选择合适的查询方式来实现多个模糊查询。 ### 回答3: ESElasticsearch)是一个开源的分布式全文搜索和分析引擎,而Java是一种编程语言。多个模糊查询是指在ES中进行多个模糊搜索。 在ES中,可以使用模糊查询(fuzzy query)来匹配与搜索项相似但不完全相同的文档。模糊查询基于Levenshtein距离(编辑距离)的算法,可以在给定最大编辑距离的情况下查找与搜索项相似的文档。 使用Java可以与ES进行交互,通过Java的API将模糊查询操作发送到ES中。首先,需要在Java代码中引入ES相关的库和类。然后,可以连接到ES集群,创建一个ES客户端对象。 在Java中,可以使用QueryBuilder类来构建模糊查询。模糊查询的关键是设置一个匹配项和一个模糊度(fuzziness)参数。匹配项可以是一个具体的词语或者短语,模糊度参数表示搜索时允许的最大编辑距离。 例如,在Java中进行多个模糊查询,可以使用BoolQueryBuilder来构建复合查询。可以使用should()方法将多个模糊查询添加到查询条件中。每个模糊查询可以使用fuzzyQuery()方法来构建。 最后,通过Java的API将查询发送到ES集群,并获取返回的结果。返回的结果可以是与模糊查询匹配的文档列表,可以根据需要进行进一步的处理和分析。 总之,ES可以进行多个模糊查询,而Java作为一种编程语言可以与ES进行交互,并使用其API来构建和发送模糊查询。这样可以在ES中进行高效的模糊搜索,并获取匹配的文档结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清石小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值