GET _search { "query": { "match_all": {} } } #创建索引 PUT /zxy { "mappings":{ "properties":{ "info":{ "type":"text", "analyzer":"ik_smart" }, "email":{ "type":"keyword", "index":false }, "name":{ "type":"object", "properties":{ "firstName":{ "type":"keyword" }, "lastName":{ "type":"keyword" } } } } } } #新添索引字段 PUT /zxy/_mapping { "properties":{ "age":{ "type":"integer" } } } GET /zxy #插入文档 POST /zxy/_doc/1 { "age":"21", "email":"2429203557@qq.com", "info":"哈哈有几个哈", "name":{ "firstName":"赵", "lastName":"兴宇" } } #查询文档 GET /zxy/_doc/1 #删除文档 DELETe /zxy/_doc/1 # 一.全量修改 全部修改 id存在就是修改,不存在就是新增 PUT /zxy/_doc/1 { "age":"21", "email":"zhaoxingyu@qq.com", "info":"哈哈有几个哈", "name":{ "firstName":"赵", "lastName":"兴宇" } } #局部修改文档字段 POST /zxy/_update/1 { "doc":{ "info":"纱雾天下第一!" } } #酒店的mapping PUT /hotel { "mappings": { "properties": { "id":{ "type": "keyword" }, "name":{ "type": "text", "analyzer": "ik_max_word", "copy_to": "all" }, "address":{ "type": "keyword", "index": false }, "price":{ "type": "integer" }, "score":{ "type": "integer" }, "brand":{ "type": "keyword", "copy_to": "all" }, "city":{ "type": "keyword" }, "starName":{ "type": "keyword" }, "business":{ "type": "keyword", "copy_to": "all" }, "location":{ "type": "geo_point" }, "pic":{ "type": "keyword", "index": false }, "all":{ "type": "text", "analyzer": "ik_max_word" } } } } GET /hotel DELETE /hotel GET /hotel/_doc/47478 #批量查询 GET /hotel/_search #查询所有 GET /hotel/_search { "query": { "match_all": { } } } #全文检索查询 GET /hotel/_search { "query": { "match": { "all": "北京" } } } #允许同时查询多个字段 GET /hotel/_search { "query": { "multi_match": { "query": "五星级", "fields": ["city","brand","starName"] } } } #精确查询,查找keyword 不可分词 # term对值查询(完全一致才行) GET /hotel/_search { "query": { "term": { "city": { "value": "北京" } } } } #精确查询 ,对范围查询 # gte:#大于等于 lte :#小于等于 没有e就是没有等于 GET /hotel/_search { "query": { "range": { "price": { "gte": 200, "lte": 300 } } } } #地理查询 # geo_bounding_box: 查询geo_point值落在某个矩形范围的所有文档 GET /hotel/_search { "query": { "geo_bounding_box":{ "location":{ "top_left":{ "lat":31.1, "lon":121.5 }, "bottom_right":{ "lat":30.9, "lon":121.7 } } } } } #geo_distance:查询到指定中心点小于某个距离值的所有文档 GET /hotel/_search { "query": { "geo_distance":{ "distance":"5km", "location":"31.21, 121.5" } } } #复合查询 将其他简单查询组合起来 实现更复杂的搜索逻辑 #function score :算分函数查询,算分控制文档排名 #高亮 GET /hotel/_search { "query": { "match": { "all": "如家" } }, "highlight": { "fields": { "name":{ "require_field_match": "false" } } } } public class HotelIndexTest { private RestHighLevelClient client; @Test void testInit() { System.out.println(client); } @Test void createHotelIndex() throws IOException { // 1.创建Request对象 CreateIndexRequest request = new CreateIndexRequest("hotel"); // 2.准备请求的参数: DSL语句 request.source(MAPPING_TEMPLATE, XContentType.JSON); // 3.发起请求 client.indices().create(request, RequestOptions.DEFAULT); } @Test void existsHotelIndex() throws IOException { GetIndexRequest request = new GetIndexRequest("hotel"); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.err.println(exists ? "索引库已经存在" : "索引库不存在"); } @Test void getHotelIndex() throws IOException { GetIndexRequest request = new GetIndexRequest("hotel"); GetIndexResponse hotel = client.indices().get(request, RequestOptions.DEFAULT); System.out.println(hotel.getMappings()); } @Test void deleteHotelIndex() throws IOException { DeleteIndexRequest request = new DeleteIndexRequest("hotel"); client.indices().delete(request, RequestOptions.DEFAULT); } //连接 ,最前 @BeforeEach void setUp() { this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://localhost:9200") //可多个 集群配置 // HttpHost.create("http://localhost:9200") )); } //结束释放资源,最后 @AfterEach void tearDown() throws IOException { this.client.close(); } } @SpringBootTest public class HoteldocumentTest { private RestHighLevelClient client; @Autowired private IHotelService hotelService; @Test void testInit() { System.out.println(client); } @Test void testIndexdocument() throws IOException { //根据id查询酒店数据 Hotel hotel = hotelService.getById(38609L); // 因为文档的location只有一个字段,把经纬度合在一起,所以将其转换 HotelDoc hotelDoc = new HotelDoc(hotel); // 1.准备Request对象 IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString()); // 2.准备JSON文档 request.source(JSON.toJSonString(hotelDoc), XContentType.JSON); // 3. 发送请求 client.index(request, RequestOptions.DEFAULT); } @Test void testGetdocumentById() throws IOException { GetRequest request = new GetRequest("hotel", "38609"); GetResponse response = client.get(request, RequestOptions.DEFAULT); String json = response.getSourceAsString(); HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); System.out.println(hotelDoc); System.out.println(json); } @Test void testDeletedocumentById() throws IOException { DeleteRequest request = new DeleteRequest("hotel", "38609"); client.delete(request, RequestOptions.DEFAULT); } @Test void testExistsdocumentById() throws IOException { GetRequest request = new GetRequest("hotel", "38609"); boolean exists = client.exists(request, RequestOptions.DEFAULT); System.out.println(exists ? "文档存在" : "文档不存在"); } @Test void testUpdatedocumentById() throws IOException { UpdateRequest request = new UpdateRequest("hotel", "38609"); // 2.准备参数,每两个参数为一对 key value; request.doc( "city","贵州", "name","赵兴宇家酒店" ); client.update(request,RequestOptions.DEFAULT); } @Test void testBulkRequest() throws IOException { Listhotels = hotelService.list(); // 1.创建request BulkRequest request = new BulkRequest(); // 2.准备参数,添加多个新增的request for (Hotel hotel : hotels) { HotelDoc hotelDoc = new HotelDoc(hotel); request.add( new IndexRequest("hotel") .id(hotel.getId().toString()) .source(JSON.toJSonString(hotelDoc),XContentType.JSON) ); // 可以批量新增,删除,修改 // request.add(new UpdateRequest()); } // 3.发送请求 client.bulk(request,RequestOptions.DEFAULT); } @Test void testSearchdocument() throws IOException { SearchRequest request = new SearchRequest("hotel"); SearchResponse response = client.search(request, RequestOptions.DEFAULT); System.out.println(response); } //连接 ,最前 @BeforeEach void setUp() { this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://localhost:9200") //可多个 集群配置 // HttpHost.create("http://localhost:9200") )); } //结束释放资源,最后 @AfterEach void tearDown() throws IOException { this.client.close(); } } public class RestClientdocumentTest { private RestHighLevelClient client; @Test void testMatchAll() throws IOException { //1.准备request SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL参数 request.source() .query(QueryBuilders.matchAllQuery()); // 3.发送请求,得到相应结果 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 4.解析响应结果 SearchHits searchHits = response.getHits(); //4.1查询的总条数 handleResponse(searchHits); } @Test void testMatch() throws IOException { //1.准备request SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL参数 //(1).全文检索查询 request.source() .query(QueryBuilders.matchQuery("all", "如家")); //(2).多字段查询 request.source() .query(QueryBuilders.multiMatchQuery("如家", "name", "business")); //(3).termQuery精确查询(词条查询) request.source() .query(QueryBuilders.termQuery("city", "上海")); //(4).范围查询 request.source() .query(QueryBuilders.rangeQuery("price").gte(100).lte(150)); //(5).复合查询 //(5).1创建布尔查询 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); //(5).2添加term查询 boolQuery.must(QueryBuilders.termQuery("city", "杭州")); //(5).3谭家range boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250)); //将条件添加进请求 request.source().query(boolQuery); // 3.发送请求,得到相应结果 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 4.解析响应结果 SearchHits searchHits = response.getHits(); //4.1查询的总条数 handleResponse(searchHits); } @Test void testSource() throws IOException { //1.准备request SearchRequest request = new SearchRequest("hotel"); // 2.准备DSL参数 request.source() .query(QueryBuilders.matchAllQuery()); //分页 request.source().from(0).size(5); //价格高亮显示 request.source().highlighter(new HighlightBuilder() .field("name") //是否需要与匹配字段对应 .requireFieldMatch(false) ); //价格排序 request.source().sort("price", SortOrder.ASC); // 3.发送请求,得到相应结果 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 4.解析响应结果 SearchHits searchHits = response.getHits(); //抽离函数 handleResponse(searchHits); } private void handleResponse(SearchHits searchHits) { long total = searchHits.getTotalHits().value; System.out.println("一共有:" + total + "条数据"); //4.2查询的结果数组 SearchHit[] hits = searchHits.getHits(); for (SearchHit hit : hits) { //4.3得到source String json = hit.getSourceAsString(); HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); //获取高亮字段 Map highlightFields = hit.getHighlightFields(); if (!CollectionUtils.isEmpty(highlightFields)) { HighlightField highlightField = highlightFields.get("name"); if (highlightField != null) { String name = highlightField.getFragments()[0].string(); hotelDoc.setName(name); } } //4.4打印 System.out.println(hotelDoc); } } @Test void name() { } // @Test // void name() { // } // // @Test // void name() { // } //连接 ,最前 @BeforeEach void setUp() { this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://localhost:9200") //可多个 集群配置 // HttpHost.create("http://localhost:9200") )); } //结束释放资源,最后 @AfterEach void tearDown() throws IOException { this.client.close(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)