elasticsearch常用应用操作

简介: elasticsearch常用应用操作,会批量从mysql批量导入数据。会解决一些mysql不太好写的sql语句,如搜索多模糊查询。

elasticsearch常用应用操作,会批量从mysql批量导入数据。

会解决一些mysql不太好写的sql语句,如搜索多模糊查询。

然后,重要特性可以提高查询效率,为搜索而生。

部分编辑

GET _search
{
  "query": {
    "match_all": {}
  }
}
get goods/_search
get goods/_search
{
  "query": {
    "term": {
      "categoryName": {
        "value": "手机"
      }
    }
  }
}
get goods/_search
{
  "query": {
    "match": {
      "title": "手机"
    }
  },
  "size": 500
}
get goods/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "手*"
      }
    }
  }
}
get goods/_search
{
  "query": {
    "regexp": {
      "title": "(.)*"
    }
  }
}
get goods/_search
{
  "query": {
    "prefix": {
      "brandName": {
        "value": "2dff"
      }
    }
  }
}
get goods/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1000,
        "lte": 1000
      }
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
    ]
}
get goods/_search
get goods/_search
{
  "query": {
    "query_string": {
      "fields": ["title","categoryName","brandName"],
      "query": "手机",
      "default_operator": "AND"
    }
  }
}
get goods/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "brandName": {
              "value": "小米"
            }
          }
        }
      ]
    }
  }
}
get goods/_search
{
  "query": {
    "match": {
      "title": "手机"
    }
  },
  "highlight": {
    "fields": {
      "title": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>"
      }
    }
  }
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import javax.swing.text.Highlighter;
import java.io.IOException;
import java.util.*;
/**
 * @author: samxie
 * @create: 2022/6/10
 * @Description:
 * @FileName: ElasticsearchTest
 * @History:
 * @自定义内容:
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchTest {
    @Resource
    private RestHighLevelClient client;
    private final String INDEX = "goods";
    //导入
    @Data
    class Goods {
        private Long id ;
        private String title;
        private Double price;
        private String stock;
        private Integer saleNum;
        private Date createTime;
        private String categoryName;
        private String brandName;
        private Map spec;
        @JSONField(serialize = false)//在转换JSON时,忽略该字段
        private String specStr;
        public Goods(Long id, String title, Double price, String stock, Integer saleNum,
                     Date createTime, String categoryName, String brandName, Map spec,
                     String specStr) {
            this.id = id;
            this.title = title;
            this.price = price;
            this.stock = stock;
            this.saleNum = saleNum;
            this.createTime = createTime;
            this.categoryName = categoryName;
            this.brandName = brandName;
            this.spec = spec;
            this.specStr = specStr;
        }
    }
    @Test
    public void test9() throws IOException {
        List<Goods> goodsList = new Vector<>();
        goodsList.add(new Goods(5L, "这家店", 10.00, null,
                123, new Date(), "手机帝国1", "华为pro",
                null, "{\"机身内存\":\"16G\",\"网络\":\"联通G\"}"));
        goodsList.add(new Goods(6L, "这家店2", 1102.00, null,
                123, new Date(), "手机22哈", "华为时间皮卡手机pro",
                null, "{\"机身内存\":\"16G\",\"网络\":\"联通G\"}"));
        goodsList.add(new Goods(7L, "这家店33", 1202.00, null,
                123, new Date(), "2233", "华为pro",
                null, "{\"机身内存\":\"16G\",\"网络\":\"联通G\"}"));
        goodsList.add(new Goods(8L, "这家店", 1023.00, null,
                123, new Date(), "222", "2dffd",
                null, "{\"机身内存\":\"16G\",\"网络\":\"联通G\"}"));
        //bulk import
        BulkRequest bulkRequest = new BulkRequest();
        for (Goods goods : goodsList) {
            String specStr = goods.getSpecStr();
            Map map = JSON.parseObject(specStr, Map.class);
            goods.setSpec(map);
            String toJSONString = JSON.toJSONString(goods);
            IndexRequest indexRequest = new IndexRequest(INDEX).source(toJSONString, XContentType.JSON);
            System.out.println("=======" + JSON.toJSONString(indexRequest));
            bulkRequest.add(indexRequest);
        }
        System.out.println("----" + bulkRequest);
        BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }
    @Test
    public void test34() throws IOException {
        //根据条件查询
        SearchRequest searchRequest = new SearchRequest("goods");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        RangeQueryBuilder query = QueryBuilders.rangeQuery("price");
        query.gte(200);
        query.lte(1002);
        sourceBuilder.query(query);
        sourceBuilder.sort("price", SortOrder.DESC);
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        long value = hits.getTotalHits().value;
        System.out.println("总数:" + value);
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit searchHit : hits1) {
            String sourceAsString = searchHit.getSourceAsString();
            System.out.println(sourceAsString);
        }
    }
    @Test
    public void test35() throws IOException {
        //布尔查询根据条件查询
        SearchRequest searchRequest = new SearchRequest("goods");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("brandName", "小米");
        boolQuery.must(termQueryBuilder);
        MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("title", "手机");
        boolQuery.filter(matchQuery);
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("price");
        rangeQuery.gte(200);
        rangeQuery.lte(1002);
        boolQuery.filter(rangeQuery);
        sourceBuilder.query(rangeQuery);
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        long value = hits.getTotalHits().value;
        System.out.println("总数:" + value);
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit searchHit : hits1) {
            String sourceAsString = searchHit.getSourceAsString();
            System.out.println(sourceAsString);
        }
    }
    @Test
    public void test99() throws IOException {
        SearchRequest searchRequest = new SearchRequest("goods");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "手机");
        sourceBuilder.query(queryBuilder);
        TermsAggregationBuilder aggregation = AggregationBuilders.terms("goods_brands").field("brandName").size(100);
        sourceBuilder.aggregation(aggregation);
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总数:" + total);
        Aggregations aggregations = searchResponse.getAggregations();
        Map<String, Aggregation> aggregationMap = aggregations.asMap();
        Terms goods_brands = (Terms) aggregationMap.get("goods_brands");
        List<? extends Terms.Bucket> buckets = goods_brands.getBuckets();
        Map<String, Object> map = new HashMap<>();
        for (Terms.Bucket bucket : buckets) {
            System.out.println(bucket.getKey());
            map.put(bucket.getKeyAsString(), bucket.getDocCount());
        }
        System.out.println(map);
    }
}
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
运维 监控 Java
探索Elasticsearch在Java环境下的全文检索应用实践
【6月更文挑战第30天】在大数据背景下,Elasticsearch作为分布式搜索分析引擎,因其扩展性和易用性备受青睐。本文指导在Java环境中集成Elasticsearch,涉及安装配置、使用RestHighLevelClient连接、索引与文档操作,如创建索引、插入文档及全文检索查询。此外,还讨论了高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据全文检索。
401 0
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
934 4
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
405 3
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
463 1
|
12月前
|
存储 弹性计算 运维
海量日志接入 Elasticsearch Serverless 应用降本70%以上
本文将探讨在日志场景下,使用阿里云Elasticsearch Serverless相较于基于ECS自建Elasticsearch集群的成本与性能优势,展示如何通过Serverless架构实现高达 70%以上的成本节约。
609 0
|
存储 SQL 监控
|
自然语言处理 监控 数据可视化
|
运维 监控 安全
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
303 2
|
存储 监控 搜索推荐
大规模数据存储与检索:Java与Elasticsearch应用
大规模数据存储与检索:Java与Elasticsearch应用
229 11

热门文章

最新文章