当前位置: 首页 > news >正文

网站后台数据库怎么做/百度小说排行榜风云榜

网站后台数据库怎么做,百度小说排行榜风云榜,做外贸登录国外网站,搜索引擎优化哪些方面目录 Elasticsearch概述 1. 什么是Elasticsearch 2. 作用 3. 特点 DSL(Domain Specifit Language)特定领域语言: 概念和作用 查询代码总结 最后附项目准备 1.创建搜索工程(maven工程) 2.配置文件 application…

目录

Elasticsearch概述

1. 什么是Elasticsearch

2. 作用

3. 特点

DSL(Domain Specifit Language)特定领域语言:

概念和作用

查询代码总结

最后附项目准备

1.创建搜索工程(maven工程)

 2.配置文件 application.yml

3.配置类

4.启动类

测试类代码实现

创建索引、添加、查询、删除、更新文档

DSL查询测试类


Elasticsearch概述

1. 什么是Elasticsearch

Elasticsearch是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用java开发的,开源,是当前流行的企业级搜索引擎。

2. 作用

 Elasticsearch具有极快的搜索速度,可以在几乎实时的时间内对大规模数据进行搜索和查询;它利用倒排索引和分布式搜索技术,使搜索操作变得高效,并能够多种查询方式进行全文搜索、短语匹配、模糊搜索等。

3. 特点

能够实时搜索,稳定,可靠,快速并且安装使用方便。
分布式和可扩展性:Elasticsearch基于分布式架构,可以将数据分布在多台服务器上,实现数据的水平分片和复制。这使得它能够处理海量数据,并具有高可用性和容错能力。通过添加或删除节点,可以轻松地扩展集群的容量和性能。

DSL(Domain Specifit Language)特定领域语言:

概念和作用

DSL查询是一种基于JSON的查询语言,用于构建复杂的查询和过滤条件,以检索和过滤文档。DSL查询提供了丰富的查询语法和灵活的组合方式,可以根据用户需求构建定制化的查询逻辑。

查询代码总结

@Autowired   //注入客户端RestHighLevelClient client; 
SearchRequest searchRequest = new SearchRequest("abc");  //参数为索引名
searchRequest.types("doc");  //参数为类型
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  //创建查找源构造器
SearchResponse searchResponse = client.search(searchRequest);  一、分页查询
//分页查询,设置起始下标,从0开始 
searchSourceBuilder.from(0); //工作中可以套公式计算出起始值(page-1)*size
//每页显示个数 
searchSourceBuilder.size(10); 二、Term精准查询
searchSourceBuilder.query(QueryBuilders.termQuery("name","spring")); 三、根据id精准匹配
searchSourceBuilder.query(QueryBuilders.termsQuery("_id", idList)); 四、match全文检索
先将搜索字符串分词,再使用各个词条从索引中搜索。
searchSourceBuilder.query(QueryBuilders.matchQuery("description", "spring开发").operator(Operator.OR));五、multi一次匹配多个字段
单项匹配是在一个field中去匹配,多项匹配是拿关键字去多个Field中匹配。
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("spring框架", "name", "description") .minimumShouldMatch("50%"); 
multiMatchQueryBuilder.field("name",10);//提升boost显示级别六、布尔查询
must:文档必须匹配must所包括的查询条件,相当于 “AND”。 表示必须,多个查询条件必须都满足。
should:文档应该匹配should所包括的查询条件其中的一个或多个,相当于 "OR" 。表示或者,多个查询条件只要有一个满足即可。
must_not:文档不能匹配must_not所包括的该查询条件,相当于 “NOT”。表示非。
boolQueryBuilder.must(multiMatchQueryBuilder); 七、filter过滤器
boolQueryBuilder.filter(QueryBuilders.termQuery("studymodel", "201001")); 
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(60).lte(100)); 八、sort排序
searchSourceBuilder.sort(new FieldSortBuilder("price").order(SortOrder.ASC)); 九、高亮显示
//高亮设置
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<tag>");//设置前缀
highlightBuilder.postTags("</tag>");//设置后缀
// 设置高亮字段
highlightBuilder.fields().add(new HighlightBuilder.Field("name"));
//取出高亮字段内容
HighlightField nameField = highlightFields.get("name");
Text[] fragments = nameField.getFragments();

最后附项目准备

1.创建搜索工程(maven工程)

添加RestHighLevelClient依赖及junit依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version></parent><groupId>cn.yh</groupId><artifactId>yh-service-search</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--elasticsearch--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>6.2.1</version><exclusions><exclusion><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>6.2.1</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>6.2.1</version></dependency><!--junit--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
</project>

 2.配置文件 application.yml

server:port: 8080
spring:application:name: yh-search-service
yh:elasticsearch:hostlist: ${eshostlist:127.0.0.1:9200} #多个结点中间用逗号分隔

3.配置类

创建 com.yh.search.config 包在其下

package cn.yh.es.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticsearchConfig {@Value("${yh.elasticsearch.hostlist}")private String hostlist;@Beanpublic RestHighLevelClient restHighLevelClient() {//解析hostlist配置信息String[] split = hostlist.split(",");//创建HttpHost数组,其中存放es主机和端口的配置信息HttpHost[] httpHostArray = new HttpHost[split.length];for (int i = 0; i < split.length; i++) {String item = split[i];httpHostArray[i] =new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");}//创建RestHighLevelClient客户端return new RestHighLevelClient(RestClient.builder(httpHostArray));}//项目主要使用RestHighLevelClient,对于低级的客户端暂时不用@Beanpublic RestClient restClient() {//解析hostlist配置信息String[] split = hostlist.split(",");//创建HttpHost数组,其中存放es主机和端口的配置信息HttpHost[] httpHostArray = new HttpHost[split.length];for (int i = 0; i < split.length; i++) {String item = split[i];httpHostArray[i] =new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");}return RestClient.builder(httpHostArray).build();}
}

4.启动类

@SpringBootApplication
public class SearchApplication {public static void main(String[] args) throws Exception {SpringApplication.run(SearchApplication.class, args);}
}

测试类代码实现

创建索引、添加、查询、删除、更新文档

@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTest {@Autowiredprivate RestHighLevelClient client;@Autowiredprivate RestClient restClient;/*** 创建索引库(数据库),创建映射Mapping(字段)* @throws IOException*/@Testpublic void creatIndex() throws IOException {CreateIndexRequest createIndexRequest = new CreateIndexRequest("yh_test");//1.创建索引的客户端IndicesClient indices = client.indices();//3.1设置索引参数createIndexRequest.settings(Settings.builder().put("number_of_shards",1).put("number_of_replicas",0).build());//3.2创建映射createIndexRequest.mapping("doc","{\n" +"    \"properties\": {  \n" +"        \"name\": {\n" +"            \"type\": \"text\",\n" +"            \"analyzer\":\"ik_max_word\",\n" +"            \"search_analyzer\":\"ik_smart\"\n" +"        },\n" +"        \"description\": {\n" +"            \"type\": \"text\",\n" +"            \"analyzer\":\"ik_max_word\",\n" +"            \"search_analyzer\":\"ik_smart\"\n" +"        },\n" +"        \"studymodel\": {\n" +"            \"type\": \"keyword\"\n" +"        },\n" +"        \"price\": {\n" +"            \"type\": \"float\"\n" +"        },\n" +"        \"timestamp\": {\n" +"            \"type\":   \"date\",  \n" +"            \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +"        }\n" +"    }\n" +"}", XContentType.JSON);//2.创建响应对象CreateIndexResponse response = indices.create(createIndexRequest);//得到响应对象boolean responseAcknowledged = response.isAcknowledged();System.out.println(responseAcknowledged);}/*** 添加文档(向表doc中添加记录)* @throws IOException*/@Testpublic void addDoc() throws IOException {//准备json数据Map<String, Object> jsonMap = new HashMap<>();jsonMap.put("name", "spring MVC开源框架1");jsonMap.put("description", "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud基础入门 3.实战Spring Boot 4.注册中心eureka。");jsonMap.put("studymodel", "201001");SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");jsonMap.put("timestamp", dateFormat.format(new Date()));jsonMap.put("price", 5.6f);//获取索引对象IndexRequest indexRequest = new IndexRequest("yh_test","doc","6");//向索引中添加数据indexRequest.source(jsonMap);//客户端添加索引IndexResponse index = client.index(indexRequest);System.out.println(index.getResult());}/*** 查询文档* @throws IOException*/@Testpublic void searchDoc() throws IOException {GetRequest getRequest = new GetRequest("yh_test","doc","N7gytIkBjqFbH1htibgh");GetResponse response = client.get(getRequest);System.out.println(response);boolean exists = response.isExists();System.out.println(exists);Map<String, Object> sourceAsMap = response.getSourceAsMap();System.out.println(sourceAsMap);}/*** 更新文档*/@Testpublic void updateDoc() throws IOException {UpdateRequest updateRequest = new UpdateRequest("yh_test","doc","N7gytIkBjqFbH1htibgh");Map<String, String> map = new HashMap<>();map.put("name","spring boot");updateRequest.doc(map); //将修改内容放到对象中UpdateResponse update = client.update(updateRequest);System.out.println(update);}/*** 删除文档*/@Testpublic void deleteDoc() throws IOException {//获取文档idString id = "N7gytIkBjqFbH1htibgh";DeleteRequest deleteRequest = new DeleteRequest("yh_test","doc","1"); //id为记录idDeleteResponse delete = client.delete(deleteRequest);System.out.println(delete);}}

DSL查询测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class EsDSLSearchTest {@Autowiredprivate RestHighLevelClient client;@Autowiredprivate RestClient restClient;/*** 自定义打印输出方法* @param search* @throws IOException*/public void myPrint(SearchResponse search)  {SearchHits hits = search.getHits();for (SearchHit hit : hits) {Map<String, Object> sourceAsMap = hit.getSourceAsMap();float score = hit.getScore();Double price = (Double)sourceAsMap.get("price");String name = (String) sourceAsMap.get("name");String studymodel = (String) sourceAsMap.get("studymodel");String description = (String) sourceAsMap.get("description");System.out.println("name:"+name+",studymodel:"+studymodel+",score:"+score+",price:"+price+",description:"+description);}}/*** 一:查询文档,所有记录,指定字段*/@Testpublic void selectDocBy() throws IOException {//2.SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");//4.查找源构造器SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//ctrl+h查看接口实现类列表//查询所有searchSourceBuilder.query(QueryBuilders.matchAllQuery());//source源字段过滤searchSourceBuilder.fetchSource(new String[]{"name", "studymodel"}, new String[]{});//3.searchRequest.source(searchSourceBuilder);//1.SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}//    /**
//     * 查所有记录DSL
//     */
//    @Test
//    public void selectAll() throws IOException {
//        SearchRequest searchRequest = new SearchRequest("yh_test");
//        searchRequest.types("doc");
//        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
//        searchSourceBuilder.fetchSource(new String[] {"name"},new String[]{} ); //exclude排除
//        searchRequest.source(searchSourceBuilder);
//
//        SearchResponse search = client.search(searchRequest);
//
//        //输出
//        SearchHits hits = search.getHits();
//        for (SearchHit hit : hits) {
//            String index = hit.getIndex();
//            float score = hit.getScore();
//            String id = hit.getId();
//            String type = hit.getType();
//            Map<String, Object> sourceAsMap = hit.getSourceAsMap(); //获取_source集合,该集合是上面过滤的字段
//            System.out.println(sourceAsMap);
//        }
//    }/*** 二:分页查询*/@Testpublic void splitPageSearch() throws IOException {SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//分页searchSourceBuilder.from(0);searchSourceBuilder.size(2);//限制输出字段searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchSourceBuilder.fetchSource(new String[]{"name"}, new String[]{});searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//打印输出this.myPrint(search);}/*** 三:term精准查询* {*     "query": {*         "term" : {*             "name": "spring"*         }*     },*     "_source" : ["name","studymodel"]* }*/@Testpublic void termQuery() throws IOException {SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//设置精准匹配字段searchSourceBuilder.query(QueryBuilders.termQuery("name", "spring"));//限制输出字段searchSourceBuilder.fetchSource(new String[]{"name","studymodel","description"}, new String[]{});searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 四:根据id精准匹配* {*     "query": {*         "ids" : {*             "type" : "doc",*             "values" : ["3", "4", "100"]*         }*     }* }*/@Testpublic void accurateQueryById() throws IOException {SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");String[] ids = {"3", "4", "100"};List<String> idsList = Arrays.asList(ids);  //将字符数组转换为集合SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.termsQuery("_id", idsList));searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 五:match全文检索* 先将搜索字符串分词,再使用各个词条从索引中搜索* {*     "query": {*         "match" : {*             "description" : {*                 "query" : "spring开发",*                 "operator" : "or"*             }*         }*     }* }*/@Testpublic void matchQuery() throws IOException {SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询字段为name,name:spring的记录;   Operator.OR操作数意思是分词满足其中任一记录的都可以searchSourceBuilder.query(QueryBuilders.matchQuery("name","spring").operator(Operator.OR));searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 六:multi关键字匹配多个字段* 单项匹配是在一个field中去匹配,多项匹配是拿关键字去多个Field中匹配* {*     "query": {*         "multi_match" : {*             "query" : "spring css",*             "minimum_should_match": "50%",*             "fields": [ "name", "description" ]*         }*     }* }*/@Testpublic void multiQuery() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.multiMatchQuery//spring css匹配字段;  name、description匹配字段;   minimumShouldMatch匹配度50%,分次数*50%向下取整;  field提升优先级;("spring css","name","description").minimumShouldMatch("50%").field("name",10));searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 七:布尔查询* 布尔查询对应于Lucene的BooleanQuery查询,实现将多个查询组合起来。* 三个参数:* must:文档必须匹配must所包括的查询条件,相当于 “AND”* should:文档应该匹配should所包括的查询条件其中的一个或多个,相当于 "OR"* must_not:文档不能匹配must_not所包括的该查询条件,相当于 “NOT”* {*     "_source" : [ "name", "studymodel", "description"],*     "from" : 0, "size" : 1,*     "query": {*         "bool" : {*             "must":[*                 {*                     "multi_match" : {*                         "query" : "spring框架",*                         "minimum_should_match": "50%",*                         "fields": [ "name^10", "description" ]*                     }*                 },*                 {*                     "term":{*                         "studymodel" : "201001"*                     }*                 }*             ]*         }*     }* }*/@Testpublic void boolQuery() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询一MultiMatchQueryBuilder multiMatchQueryBuilder =QueryBuilders.multiMatchQuery("spring框架","name","description").minimumShouldMatch("50%").field("name",10);//查询二TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("studymodel", "201001");//获取bool查询对象BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(multiMatchQueryBuilder);boolQueryBuilder.must(termsQuery);searchSourceBuilder.query(boolQueryBuilder);//设置过滤字段searchSourceBuilder.fetchSource(new String[]{"name","studymodel","description"},new String[]{});//设置分页searchSourceBuilder.from(0);searchSourceBuilder.size(2);searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 八:filter过滤器* 过滤是针对搜索的结果进行过滤,过滤器主要判断的是文档是否匹配,不去计算和判断文档的匹配度得分,所以过* 虑器性能比查询要高,且方便缓存,推荐尽量使用过滤器去实现查询或者过滤器和查询共同使用。*/@Testpublic void filterQuery() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询一MultiMatchQueryBuilder multiMatchQueryBuilder =QueryBuilders.multiMatchQuery("spring框架","name","description").minimumShouldMatch("50%").field("name",10);//获取bool查询对象BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(multiMatchQueryBuilder);//filter过滤器boolQueryBuilder.filter(QueryBuilders.termsQuery("studymodel","201001"));boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(60).lte(100));searchSourceBuilder.query(boolQueryBuilder);//设置过滤字段searchSourceBuilder.fetchSource(new String[]{"name","studymodel","price","description"},new String[]{});//设置分页searchSourceBuilder.from(0);searchSourceBuilder.size(6);searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 九:sort排序*/@Testpublic void sortQuery() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询一MultiMatchQueryBuilder multiMatchQueryBuilder =QueryBuilders.multiMatchQuery("spring框架","name","description").minimumShouldMatch("50%").field("name",10);//获取bool查询对象BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(multiMatchQueryBuilder);//filter过滤器boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(0).lte(100));searchSourceBuilder.query(boolQueryBuilder);//sort排序searchSourceBuilder.sort("studymodel", SortOrder.DESC);searchSourceBuilder.sort("price",SortOrder.ASC);//设置过滤字段searchSourceBuilder.fetchSource(new String[]{"name","studymodel","price","description"},new String[]{});//设置分页searchSourceBuilder.from(0);searchSourceBuilder.size(6);searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出this.myPrint(search);}/*** 十:高亮显示highlight* {*     "_source" : [ "name", "studymodel", "description","price"],*     "query": {*         "bool" : {*             "must":[*                 {*                     "multi_match" : {*                         "query" : "开发框架",*                         "minimum_should_match": "50%",*                         "fields": [ "name^10", "description" ],*                         "type":"best_fields"*                     }*                 }*             ],*             "filter": [*                 { "range": { "price": { "gte": 0 ,"lte" : 100}}}*             ]*         }*     },*     "sort" : [*         {*             "price" : "asc"*         }*     ],*     "highlight": {*         "pre_tags": ["<tag1>"],*         "post_tags": ["</tag1>"],*         "fields": {*             "name": {},*             "description":{}*         }*     }* }*/@Testpublic void highLightQuery() throws IOException {SearchRequest searchRequest = new SearchRequest("yh_test");searchRequest.types("doc");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//指定查询字段searchSourceBuilder.fetchSource(new String[]{"name","studymodel","description","price"},new String[]{});//multi查询MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("开发","name","description").field("name",10).minimumShouldMatch("50%");searchSourceBuilder.query(multiMatchQueryBuilder);  //给查询资源构造器传过去//布尔查询BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(searchSourceBuilder.query());//filter过滤器boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(0).lte(100));//price升序排列searchSourceBuilder.sort(new FieldSortBuilder("price").order(SortOrder.ASC));//高亮HighlightBuilder highlighter =new HighlightBuilder();highlighter.preTags("<tag1>");highlighter.postTags("</tag1>");//设置高光字段highlighter.fields().add(new HighlightBuilder.Field("name"));highlighter.fields().add(new HighlightBuilder.Field("description"));searchSourceBuilder.highlighter(highlighter);   //给查询资源构造器传过去searchRequest.source(searchSourceBuilder);SearchResponse search = client.search(searchRequest);//输出SearchHits hits = search.getHits();SearchHit[] searchHits = hits.getHits();for (SearchHit hit : searchHits) {Map<String, Object> sourceAsMap = hit.getSourceAsMap();//名称String name = (String) sourceAsMap.get("name");//取出高亮字段内容Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (highlightFields != null) {  //如果高光对象存在,获取一下name字段的高光内容HighlightField nameField = highlightFields.get("name");
//                System.out.println("++++++++"+nameField+"++++++++++++++");if (nameField != null) {Text[] fragments = nameField.getFragments();  //得到片段数组StringBuffer stringBuffer = new StringBuffer();for (Text str : fragments) {stringBuffer.append(str.string());}name = stringBuffer.toString();}}String index = hit.getIndex();String type = hit.getType();String id = hit.getId();float score = hit.getScore();String sourceAsString = hit.getSourceAsString();String studymodel = (String) sourceAsMap.get("studymodel");String description = (String) sourceAsMap.get("description");System.out.println(name);System.out.println(studymodel);System.out.println(description);}}}

相关文章:

Elasticsearch概述和DSL查询总结

目录 Elasticsearch概述 1. 什么是Elasticsearch 2. 作用 3. 特点 DSL&#xff08;Domain Specifit Language&#xff09;特定领域语言&#xff1a; 概念和作用 查询代码总结 最后附项目准备 1.创建搜索工程&#xff08;maven工程&#xff09; 2.配置文件 application…...

扩展卡尔曼滤波器代码

文章目录 前言问题状态向量和观测向量加性噪声的形式状态方程及求导观测方程及求导状态初始化过程噪声和观测噪声卡尔曼滤波过程code 前言 卡尔曼滤波器在1960年被卡尔曼发明之后&#xff0c;被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使…...

9:00开始面试,9:08就出来了,这问题问的实在是····

外包工作3年&#xff0c;今年裸辞跳槽&#xff0c;很幸运的是找到了下家&#xff0c;不过 自从加入到这家公司&#xff0c;每天不是在加班就是在加班的路上&#xff0c;薪资倒是给的不少&#xff0c;所以我也就忍了。没想到6月一纸通知&#xff0c;所有人都不许加班&#xff0…...

揭秘:5个美国程序员与日本程序员的差异

大家好&#xff0c;这里是程序员晚枫。想了解更多精彩内容&#xff0c;快来关注程序员晚枫 今天以美国和日本程序员为例&#xff0c;给大家分享一下国外程序员的生活。 以下是五个美国程序员和日本程序员的的区别&#xff1a; 工作方式&#xff1a;美国程序员通常更注重自由和…...

Springboot实现简单JWT登录鉴权

登录为啥需要鉴权&#xff1f; 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中&#xff0c;用户需要提供一定的身份信息&#xff08;例如用户名和密码&#xff09;进行登录&#xff0c;登录后系统会为用户生成一个身份令牌&#xff08;例如 JWT Token&am…...

C++设计模式创建型之工厂模式整理

一、工厂模式分类 工厂模式属于创建型模式&#xff0c;一般可以细分为简单工厂模式、工厂模式和抽象工厂模式。每种都有不同的特色和应用场景。 二、工厂模式详情 1、简单工厂模式 1&#xff09;概述 简单工厂模式相对来说&#xff0c;在四人组写的《设计模式------可复用面…...

前端安全XSS和CSRF讲解

文章目录 XSSXSS攻击原理常见的攻击方式预防措施 CSRFCSRF攻击原理常见攻击情景预防措施&#xff1a; CSRF和XSS的区别 XSS 全称Cross Site Scripting&#xff0c;名为跨站脚本攻击。为啥不是单词第一个字母组合CSS&#xff0c;大概率与样式名称css进行区分。 XSS攻击原理 不…...

本地化部署自建类ChatGPT服务远程访问

本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 &#x1f340;小结&#x1f340; 前言 Te…...

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能&#xff1a; webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手&#xff1a;隔行变色 -S实际是--save的简写&#xff0c;表示安装的第三方…...

安全防御(3)

1.总结当堂NAT与双机热备原理&#xff0c;形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统&#xff0c;它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则&#xff0c;用于检测和警告可能存在的入侵行为。签名过滤器可以根…...

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展&#xff0c;AR增强现实技术逐渐走进了我们的生活。加上商贸国际化&#xff0c;远程协同纵深到制造生产的更多环节&#xff0c;研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡&#xff0c;在汽车行业&#…...

css-3:什么是响应式设计?响应式的原理是什么?如何做?

1、响应式设计是什么&#xff1f; 响应式网站设计&#xff08;Responsive WEB desgin&#xff09;是一个网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境&#xff08;系统平台、屏幕尺寸、屏幕定向等&#xff09;进行相应的相应和调整。 描述响应式…...

Armstrong数,n位数等于其各位数的n次方之和。

//Armstrong数具有以下特征&#xff1a;一个n位数等于其各位数的n次方之和。 //例如&#xff1a;1531^35^33^3 16341^46^43^44^4 #include<stdio.h> #include<math.h> //实在不知道的暴力求解方法 int main() {//Armstrong数具有以下特征&#xff1a;一个…...

blender的下载安装和配置中文环境

引言 在3D建模和动画设计领域&#xff0c;Blender 作为一款强大且免费的开源软件&#xff0c;一直以优秀的性能和对众多技术的支持赢得了大批用户的喜爱。然而&#xff0c;对于刚接触这款软件的用户而言&#xff0c;其安装和配置过程可能会带来一定困扰&#xff0c;尤其是在设…...

MyCat配置rule.xml、server.xml讲解

1. rule.xml分片规则配置文件 rule.xml中配置的主要就是拆分表的规则&#xff0c;rule.xml中主要包含两类标签 tableRule 和Function。 tableRule标签里面主要配置我们的分片规则&#xff0c;Function里面涉及的是分片规则里面所涉及的java类&#xff0c;都是在function中配置…...

Linux项目部署

目录 一JAVAWeb环境的部署【安装JDK&#xff0c;MySQL数据库&#xff0c;Tomcat】 二.手工部署SpringBoot项目&#xff08;写的最好的&#xff09; 1.在IDEA中开发SpringBoot项目并打成jar包--点击右侧的Maven执行package命令 2.将jar包上传到Linux服务器 3.执行以下命令&a…...

案例:Docker 镜像的创建及使用(commit与dockerfile方式)

文章目录 1、commit方式创建镜像1.1、前期准备1.2、制成镜像1.3、启动镜像1.3.1、启动镜像启动nginx1.3.2、一个命令直接全部启动1.3.3、两种方式区别 1.4、commit创建镜像方式的本质 2、Dockerfile的使用2.1、Dockerfile指令2.2、nginx镜像制作案例2.3、查看构建历史&#xff…...

QGIS二次开发三:显示Shapefile

Shapefile 为 OGR 所支持的最重要的数据格式之一&#xff0c;自然可以被 QGIS 加载。那么该如何显示Shapefile呢&#xff1f; 一、先上代码 #include <qgsapplication.h> #include <qgsproviderregistry.h> #include <qgsmapcanvas.h> #include <qgsvec…...

FFmpeg中相关结构体介绍

AVFormatContext&#xff1a;此结构体存储音视频封装格式中包含的信息&#xff0c;并且这个结构体是贯穿整个播放流程的。在这个结构体中主要包含AVInputFormat&#xff0c;AVOutputFormat、AVStream等。 struct AVInputFormat *iformat; // 输入数据的封装格式 AVIOContext *…...

Llama 2 云端部署与API调用【AWS SageMaker】

Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样&#xff0c;你一定会迫不及待地想要亲自动手并用它来构建。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将…...

根文件系统制作

1.官网下载工具 制作工具&#xff1a;busybox https://busybox.net/downloads/ 2.制作根文件系统 2.1准备工作 a.把压缩包放在FSP1M目录下&#xff0c;并解压 2.2正式开始 2.2.1配置交叉编译工具链 1. 打开Makefile文件 2. 修改ARCH &#xff1f;$(SUBARCH) &#xf…...

Linux ARM64架构 动态替换 altinstructions

文章目录 简介一、altinstructions节1.1 .altinstructions1.2 .rela.altinstructions 二、内核模块重定位源码分析参考资料 简介 在内核开发中&#xff0c;有时需要对内核代码进行修补&#xff0c;以解决bug、优化性能或引入新功能。替代指令&#xff08;altinstructions&…...

Mac显示隐藏文件夹

1、设置隐藏文件可见 defaults write com.apple.finder AppleShowAllFiles TRUE 2、killall Finder killall Finder...

使用 Habana Gaudi2 加速视觉语言模型 BridgeTower

&#x1f917; 宝子们可以戳 阅读原文 查看文中所有的外部链接哟&#xff01; 在对最先进的视觉语言模型 BridgeTower 进行微调时&#xff0c;使用 Optimum Habana v1.6&#xff0c; Habana Gaudi2 可以达到 近 3 倍于 A100 的速度。硬件加速的数据加载以及 fast DDP 这两个新特…...

mysql查询语句之实践篇

基础查询语句 完整语法格式如下&#xff1a; select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 -- 创建表 create table stu(id int,name varchar(20),chinese double,english double,math double ); --…...

Linux 和 MacOS 中的 profile 文件详解(二)

上篇文章讲解了 profile 文件的作用、login shell 和 non-login shell 的定义、不同 profile 被 bash shell 在不同情况下的加载顺序和作用&#xff0c;本文讲解一下 zsh shell 相关的知识。 zsh shell MacOS 从 Catalina 版本开始将 zsh 作为默认登录 shell 和交互式 shell。…...

Python之多重继承

一、多重继承 Python支持多重继承&#xff0c;一个子类可以有多个“直接父类”。这样&#xff0c;就具备了“多个父类”的特点。但是由于&#xff0c;这样会被“类的整体层次”搞的异常复杂&#xff0c;尽量避免使用。 class A:def aa(self):print("aa") ​ class B…...

前端CSS文字阴影text-shadow记录

前端CSS文字阴影text-shadow记录 一、文字阴影 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…...

maven 删除下载失败的包

本文介绍了当Maven包报红时&#xff0c;使用删除相关文件的方法来解决该问题。文章详细说明了_remote.repositories、.lastUpdated和_maven.repositories文件的作用&#xff0c;以及如何使用命令行删除这些文件。这些方法可以帮助开发者解决Maven包报红的问题&#xff0c;确保项…...

《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下

1.简介 Fiddler是一款强大的HTTP抓包工具&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。Fiddler提供的功能基本上能…...