做汽配的都上什么网站,node.js 打开wordpress,如何在国外网站上做外贸,企业网站哪里可以做es就是json请求体代替字符串查询
dsl查询和过滤#xff0c;一个模糊查询#xff0c;一个非模糊查询
must#xff0c;should 做模糊查询的#xff0c;里面都是match#xff0c;根据查询内容进行匹配#xff0c;filter过滤#xff0c;term词元查询#xff0c;就是等值查…es就是json请求体代替字符串查询
dsl查询和过滤一个模糊查询一个非模糊查询
mustshould 做模糊查询的里面都是match根据查询内容进行匹配filter过滤term词元查询就是等值查询。range query : 查询所有的查询条件在query里面 bool : 组合搜索bool可以组合多个查询条件为一个查询对象这里包含了 DSL查询和DSL过滤的条件 must : 必须匹配 与(must) 或(should) 非(must_not) match分词匹配查询会对查询条件分词 multi_match :多字段匹配 filter 过滤条件 term词元查询不会对查询条件分词 fromsize :分页 _source 查询结果中需要哪些列 sort排序 分词器
什么叫分词在全文检索的理论中通过关键字查询文档索引进行匹配
倒排索引正派索引
正排索引就是一个一个匹配然后赛选数据。
倒排索引根据分词器进行分词语义转换排序分组操作生成词元词元对应文档id
操作es首先要获取客户端所以我们要工具类拿到客户端。
es为什么查询快因为基于倒排索引然后就问你倒排索引非常热点的面试题。
分词器作用
数据的查询是否精准和分词器有很大关系它默认是英文的分词器
中文的分词器
IK分词器
ES对中文做分词器默认是英文分词器10年了还是IK分词器。
要写上anlyzer“ik smart”
ik 分词器中有个config文件夹加上自己想要分词的词语即可。
解压后放到Es插件中
mappering 映射 都是自动给我们创建的有默认mappering
给的什么数据就自动解析默认映射类型。 详细映射写法
analyzer 索引分词器索引创建时使用的分词器
search_analyzer 搜索改字段的值传入的查询内容的分词器。
多字段索引当对该字段需要使用多种索引模式时使用。如城市搜索 New Yorkcity:city:{ type: text, analyzer: ik_smart, fields: { raw: { type: keyword } } } 解释相当于给 city取了一个别名 city.rawcity的类型为text , city.raw的类型keyword 搜索 city分词 ; 搜索city.raw 不分词那么以后搜索过滤和排序就可以使用city.raw字段名 |
相当于又是text又是keyword
排序不分词相当于多了个别名。 默认文档映射
public class ESClientUtil {public static TransportClient getClient(){TransportClient client null;Settings settings Settings.builder().put(cluster.name, elasticsearch).build();try {client new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName(127.0.0.1), 9300));} catch (UnknownHostException e) {e.printStackTrace();}return client;}}
API结合Es
简单的增删改查就不讲了吧大概流程都是差不多都是获取的客户端.方法增删改查的。
先批量插入100条数据做测试用的 Testpublic void test4(){
// 批量新增100次TransportClient client esClientUtil.getClient();BulkRequestBuilder bulkRequestBuilder client.prepareBulk(shopcar99, user);for (int i 0; i 100; i) {IndexRequestBuilder indexRequestBuilder client.prepareIndex(shopcar99, user, i );HashMapString, Object map new HashMap();map.put(id,i);map.put(name,zhangi);map.put(sex,i%20?n:nv);map.put(age,26i);map.put(intro,iqweqeq);indexRequestBuilder.setSource(map);bulkRequestBuilder.add(indexRequestBuilder);}BulkResponse bulkItemResponses bulkRequestBuilder.get();System.out.println(bulkItemResponses);}
DSL查询DSL过滤
主要的层级关系
query - bool - must - match
先去那query再去拿bool分词是must-》match
filter-range
把层级理清楚了代码就懂了。 Testpublic void test5(){TransportClient client esClientUtil.getClient();SearchRequestBuilder requestBuilder client.prepareSearch(shopcar99);SearchRequestBuilder user requestBuilder.setTypes(user);
// 3分页查询排序指定查询字段查询条件
// 分页requestBuilder.setFrom(0);requestBuilder.setSize(10);
// paixurequestBuilder.addSort(age,SortOrder.ASC);
// 第一个字段叫做包含的 会查出第一个参数中设置的字段
// 第二个参数 exclude 排除 就是排除掉第二个参数中的字段其他字段全部都要查出来。String [] include {id,name,age,sex,intro};requestBuilder.setFetchSource(include,null);
// 为什么要用bool
// query - bool - must - match
// bool直接拿到bool那个层级
// 分词区间等级查询,must-matchBoolQueryBuilder boolQuery QueryBuilders.boolQuery();ListQueryBuilder must boolQuery.must();
// 模糊查询
// must.add(QueryBuilders.matchQuery(intro,1));MatchQueryBuilder matchQueryBuilder QueryBuilders.matchQuery(intro, qweqeq);must.add(matchQueryBuilder);
// bool-filter-rangeListQueryBuilder filter boolQuery.filter();QueryBuilders.rangeQuery(age).gte(30).lte(70);//等值查询TermQueryBuilder termQueryBuilder QueryBuilders.termQuery(sex, n);filter.add(termQueryBuilder);requestBuilder.setQuery(boolQuery);SearchResponse searchResponse requestBuilder.get();SearchHits hits searchResponse.getHits();System.out.println(hits.getTotalHits());SearchHit[] hits1 hits.getHits();
// hits里面还有hits这里面就是数据for (SearchHit documentFields : hits1) {System.out.println(documentFields.getSourceAsMap());}client.close();}