0
点赞
收藏
分享

微信扫一扫

elasticsearch常用应用操作


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);



}














}


举报

相关推荐

0 条评论