栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

将“Elasticsearch“ 和 “SpringBoot“ 做整合,对 “ElasticsearchRestTemplate“ 的一些API做简单的测试。

将“Elasticsearch“ 和 “SpringBoot“ 做整合,对 “ElasticsearchRestTemplate“ 的一些API做简单的测试。

 以下的代码是基本所有的 QueryBuilders.   的方法做解释,并实现了简单测试  差缺几个地理位置的查询 因为不常用所以没有测试, 有问题的可以评论,我会在周末做处理!  测试数据 直接链接:百度网盘https://pan.baidu.com/s/1xF_pKjRNgv4pWc1OEbRIbA?pwd=wjn0 
提取码:wjn0

自己写一个全部数据导入 用 PUT /bank/_doc/_bulk 

package com.xh.spring_es.service.impl;

import com.xh.spring_es.bean.Bank;
import com.xh.spring_es.bean.Home;
import com.xh.spring_es.dao.BankDao;
import com.xh.spring_es.service.BankService;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
import org.elasticsearch.index.query.*;
import org.elasticsearch.indices.TermsLookup;
import org.elasticsearch.script.script;
import org.elasticsearch.script.scriptType;
import org.elasticsearch.search.sort.SortBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


@Service
public class BankServiceImpl implements BankService {


    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    
    @Override
    public void searchTest01() {
        System.out.println("11111");
        //name: 为ES中保存的字段
        //QueryBuilders.queryStringQuery 数据库中存在某个值的全部查出来
        //
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.queryStringQuery("1"))
                .build();
        System.out.println(searchQuery.toString());
        //一般情况下,我们不是直接是new NativeSearchQuery,而是使用NativeSearchQueryBuilder。
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        System.out.println(search);
        for (SearchHit bankSearchHit : search) {
            //SearchHit{id='1', score=1.0, sortValues=[], content=Bank(accountNumber=1, address=880 Holmes Lane, age=32, balance=39225, city=Brogan, email=amberduke@pyrami.com, employer=Pyrami, firstName=Amber, gender=M, lastName=Duke, state=IL), highlightFields={}}
            System.out.println(bankSearchHit);
        }
    }

    
    public void searchTest02() {
        //QueryBuilders.rangeQuery("account_number") 查询某个范围的数据
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.rangeQuery("account_number")
                        .gte(10).lte(100))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        for (SearchHit bankSearchHit : search) {
            System.out.println(bankSearchHit);
        }
    }

    
    public SearchHits searchTest03() {
        //QueryBuilders.matchAllQuery() 查询所有的数据
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchAllQuery())
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest04() {
        //QueryBuilders.idsQuery().addIds("1","10","100","13") 根据ID集合查询对应数据
        //Set ids = QueryBuilders.idsQuery().ids();
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.idsQuery().addIds("1", "10", "100", "13"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest05() {
        //
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchBoolPrefixQuery("address", "Lane").analyzer("ik_max_word").minimumShouldMatch("20%").operator(Operator.OR).analyzer("").minimumShouldMatch("100%"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest06() {
        //
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchPhrasePrefixQuery("address", "Sch"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest07() {
        //
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchPhraseQuery("address", "School"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest08() {
        //
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchQuery("firstname", "Amber").operator(Operator.OR))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest09() {
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                //.withQuery(QueryBuilders.moreLikeThisQuery(new String[]{"${account_number}"},new String[]{"${1}"},null))
                .withQuery(QueryBuilders.moreLikeThisQuery(new String[]{"lastname"}, new String[]{"Duke"}, null))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest10() {
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.multiMatchQuery("Duke", "firstname", "lastname"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest11() {

        BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
        nestedBoolQueryBuilder.must(QueryBuilders.matchQuery("blackList.relationValue", ""));
        nestedBoolQueryBuilder.must(QueryBuilders.matchQuery("blackList.relationKey", ""));

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.nestedQuery("blackList", nestedBoolQueryBuilder, ScoreMode.None))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest12() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.prefixQuery("email", "hattiebo"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest13() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.regexpQuery("email", "h.*l"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest14() {
        Map params = new HashMap<>();
        params.put("param1", 2);
        script script = new script(scriptType.INLINE, script.DEFAULT_script_LANG,
                "doc['自定字段'].value > params.param1", params);
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.scriptQuery(script))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest15() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.simpleQueryStringQuery("M"))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest16() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanContainingQuery(
                        QueryBuilders.spanNearQuery(
                                QueryBuilders.spanTermQuery("email", "amberd"),
                                12).addClause(QueryBuilders.spanTermQuery("email", "hattie")),
                        QueryBuilders.spanTermQuery("email", "dalea")))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest17() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanFirstQuery(
                        QueryBuilders.spanTermQuery("firstname", "Duke"),
                        4))
                .build();

        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest18() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanMultiTermQueryBuilder(QueryBuilders.wildcardQuery("email", "amberduke@pyrami.com")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest19() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanNearQuery(QueryBuilders.spanTermQuery("email", "amberduke"),
                        12).addClause(QueryBuilders.spanTermQuery("email", "sss")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest20() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanNotQuery(QueryBuilders.spanTermQuery("email", "amberduke"),
                        QueryBuilders.spanTermQuery("email", "ss")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest21() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanOrQuery(QueryBuilders.spanTermQuery("email", "amberduke"))
                        .addClause(QueryBuilders.spanTermQuery("email", "ss")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest22() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanTermQuery("email", "amberduke"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }


    
    public SearchHits searchTest23() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.spanWithinQuery(QueryBuilders.spanNearQuery(
                        QueryBuilders.spanTermQuery("待查询的字段", "待查询的值"),
                        12).addClause(QueryBuilders.spanTermQuery("待查询的字段", "待查询的值")),
                        QueryBuilders.spanTermQuery("待查询的字段", "待查询的值")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest24() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.termQuery("待查询的字段", "待查询的值"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest25() {

        TermsLookup termsLookup = new TermsLookup("作为查询条件的索引", "作为查询条件的文档的id", "作为查询条件的字段");
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.termsLookupQuery("待查询的字段", termsLookup))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest26() {
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.wildcardQuery("待查询的字段", "待查询的值"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }


    
    public SearchHits searchTest27() {
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.wrapperQuery("eyJ0ZXJtIiA6IHsgIuW+heafpeivoueahOWtl+autSI6ICLlvoXmn6Xor6LnmoTlgLwiIH19"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest28() {
        QueryBuilder positiveQuery = QueryBuilders.wildcardQuery("待查询的字段", "待查询的值");
        QueryBuilder negativeQuery = QueryBuilders.wildcardQuery("待查询的字段", "待查询的值");
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.boostingQuery(positiveQuery, negativeQuery))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }


    
    public SearchHits searchTest29() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("待查询的字段", "待查询的值")).boost(1.2f))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }


    
    public SearchHits searchTest30() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.disMaxQuery()
                        .add(QueryBuilders.matchPhrasePrefixQuery("待查询的字段", "待查询的值"))
                        .add(QueryBuilders.matchPhraseQuery("待查询的字段", "待查询的值")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest31() {
        //对于地理点
        GeoPoint geo = new GeoPoint(-35.58, 20.4);
        DistanceFeatureQueryBuilder.Origin origin = new DistanceFeatureQueryBuilder.Origin(String.valueOf(geo));
        DistanceFeatureQueryBuilder dfqb = new DistanceFeatureQueryBuilder("location$location", origin, "1km");
        //对于日期
        DistanceFeatureQueryBuilder.Origin origin1 = new DistanceFeatureQueryBuilder.Origin("now");
        DistanceFeatureQueryBuilder dfqb1 = new DistanceFeatureQueryBuilder("date_established$date", origin1, "10d");

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.distanceFeatureQuery("字段", origin, "1km"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest32() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.existsQuery("name"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }


    
    public SearchHits searchTest33() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.fieldMaskingSpanQuery(
                        QueryBuilders.spanTermQuery("待查询的字段", "待查询的值"),
                        "待查询的字段"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest34() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.functionScoreQuery(
                        QueryBuilders.termQuery("待查询的字段", "待查询的值")))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest35() {

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.fuzzyQuery("待查询的字段", "待查询的值"))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Bank.class);
        return search;
    }

    
    public SearchHits searchTest36() {
        double top = 37.779637;
        double left = 112.510492;
        double bottom = 37.72303;
        double right = 112.688716;
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.geoBoundingBoxQuery("location").setCorners(top, left, bottom, right))
                .build();
        SearchHits search = elasticsearchRestTemplate.search(searchQuery, Home.class);
        return search;
    }

}
 实体类
package com.xh.spring_es.bean;

import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;


@Data
@ToString
@document(indexName = "bank")
public class Bank {
    @Id
    @Field(type = FieldType.Text,name = "account_number")
    private Integer accountNumber;
    @Field(type = FieldType.Keyword,name = "address")
    private String address;
    private Integer age;
    private Integer balance;
    @Field(analyzer = "ik_max_word",type = FieldType.Text,name = "city")
    private String city;
    @Field(analyzer = "ik_max_word",type = FieldType.Text,name = "email")
    private String email;
    @Field(type = FieldType.Text,name = "employer")
    private String employer;
    @Field(analyzer = "ik_max_word",type = FieldType.Text,name = "firstname")
    private String firstName;
    @Field(type = FieldType.Text,name = "gender")
    private String gender;
    @Field(type = FieldType.Text,name = "lastname")
    private String lastName;
    @Field(type = FieldType.Text,name = "state")
    private String state;
}
yml文件 可以选择使用ES配置类来获取连接
spring:
  elasticsearch:
    rest:
      uris: http://192.168.95.128:9200
      username: test
      password: test
  application:
    name: ES7
server:
  port: 8002
依赖 

 


    org.projectlombok
    lombok



    org.springframework.boot
    spring-boot-starter-data-elasticsearch

package com.xh.spring_es.config;

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;


//@Configuration
//public class EsConfig extends AbstractElasticsearchConfiguration {
//    @Override
//    @Bean
//    public RestHighLevelClient elasticsearchClient() {
//        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
//                .connectedTo("192.168.8.101:9200")
//                .build();
//        return RestClients.create(clientConfiguration).rest();
//    }
//}

 

转载请附上作者

====================本文未完成之后会跟新在Java中的操作===================

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号