前言:elasticsearch最好还是在linux中进行集群部署,这样更符合企业需求和规范,笔者只在windows的单节点9200端口上部署,仅用于测试和学习。
什么是分词查询:
指的是将输入的文本或查询语句切分成一个个独立的词语或词项,以便更好地处理和分析,然后进行查询,比如你在百度上搜索”成都春熙路“,那么你会发现在成百上千的响应结果中,不仅仅有包含”成都春熙路的“,还有包含”成都的“,这就说明分词查询不是像模糊查询那样,前者还对”成都春熙路进行了分词处理,再进行查询“。
案例需求:
现在es的索引”x“中存储了三条数据:
userList.add(new UserDto("斌哥教你学vue", "123")); (这两个字段对应实体类的属性为"account"和"password")
userList.add(new UserDto("vue2-斌哥在线教学", "456"));
userList.add(new UserDto("vue2 by binge","678"));
现在只用”vue“作为查询词,将这三条数据都查到。
核心代码:
SearchRequest searchRequest = new SearchRequest("x"); // 创建查询构建器,第一个参数是要查询的文本,剩下的参数是字段,就是查询 account 和 password 中同时满足条件的列 MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("vue", "account") .fuzziness(10) //:使用编辑距离技术进行模糊匹配,比如设置了fuzziness为2,并将查询词项设置为"quik"。 //现在查询quick,由于查询词项与文档中的词项 “quick” 存在拼写差异,它们的编辑距离为1,小于等于允许的最大编辑距离2,因此这个文档将被认为是匹配的 .prefixLength(0) //prefixLength参数用于指定模糊匹配的起始单词数。 // 当设置prefixLength参数的值为0时,表示模糊匹配将从查询词项的开头进行匹配,而不需要词项的前几个字符匹配成功 .operator(Operator.fromString("OR")) //operator参数用于指定多个查询词项之间的逻辑操作符。 //Operator.fromString(“OR”)表示使用OR操作符,这意味着通过match查询匹配的文档至少需要与查询中的一个词项匹配, // 还可以设置为AND,表示所有查询词项都必须在文档中匹配才能返回 .minimumShouldMatch("1%");//返回的文档需要匹配的最小子串数,"75%"表示至少需匹配查询中的75%的词项才会返回匹配的结果。可以设置不同的值, // 如"2"表示至少需匹配2个词项,"50%"表示至少需匹配查询的一半词项 // 创建搜索源构建器 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(queryBuilder); // 创建搜索请求 searchRequest.source(sourceBuilder); try { // 执行搜索并获取结果 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); // 遍历结果并输出 for (SearchHit hit : hits.getHits()) { String id = hit.getId(); System.out.println(id); } } catch (IOException e) { e.printStackTrace(); } // 关闭客户端 try { client.close(); } catch (IOException e) { e.printStackTrace(); } }标签:文档,匹配,springboot,查询,elasticsearch,new,词项,分词 From: https://www.cnblogs.com/xialang/p/17741236.html