全文检索的概念:先建立索引,然后对索引进行搜索的过程叫做全文检索;
全文检索的特点:1.关键词高亮;
2.只处理文本,不处理语义;
3.相关度,关键字最多的排在前面;
ES:页面端口:9200;
代码端口:9300;
Kibana端口号:5601;
全文索引架构(重点):
索引创建: 1.分词;
2.词态大小写转换;
3.排序;
4.合并;
5.形成倒排索引文档;
索引搜索:
1.根据关键字搜索倒排索引文档,找到id;
2.根据id到索引库的数据区定位到数据;
ES创建连接的方式 :
//创建连接 public static TransportClient getClient(){ // on startup TransportClient client = null; try { client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); } catch (UnknownHostException e) { e.printStackTrace(); } return client; }
用es在Java里操作新增操作
//新增操作 @Test public void save(){ //创建链接 TransportClient client = EsDemo.getClient(); IndexRequestBuilder indexRequestBuilder = client.prepareIndex("pethome", "user", "37"); Map<String, Object> map = new HashMap<>(); map.put("name","新增的名字"); map.put("age",26); map.put("sex",0); map.put("id",1); indexRequestBuilder.setSource(map).get(); System.out.println(indexRequestBuilder.setSource(map)); client.close(); }
条件查询:
// 查询用户名字中包含zs,1 2 // 性别等于0,1 2 // 年龄18-80岁 ,1 2 // 按照年龄倒排序, 1 2 // 取第二页,每页10条 1 2
@Test public void Estest(){ TransportClient client = getClient(); SearchRequestBuilder prepareSearch = client.prepareSearch("pethome"); prepareSearch.setTypes("user"); // 取第二页,每页10条 1 2 prepareSearch.setFrom(1).setSize(5); // 按照年龄倒排序, 1 2 prepareSearch.addSort("age",SortOrder.DESC); BoolQueryBuilder query = QueryBuilders.boolQuery(); // 查询用户名字中包含zs,1 query.must(QueryBuilders.matchQuery("name","zs")); // 年龄18-80岁 ,1 query.filter(QueryBuilders.rangeQuery("age").gte(18).lte(80)); // 性别等于0,1 2 query.filter(QueryBuilders.termQuery("sex","1")); SearchResponse searchResponse = prepareSearch.setQuery(query).get(); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit searchHit : searchHits) { System.out.println(searchHit.getSource()); }