es多字段模糊匹配wildcardQuery,java实现

这篇具有很好参考价值的文章主要介绍了es多字段模糊匹配wildcardQuery,java实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

es 版本:7.10.1

spring-cloud版本:2.3.5.RELEASE

spring-boot-starter-data-elasticsearch 版本 2.3.12.RELEASE

spring-data-elasticsearch 版本 4.0.9.RELEASE

es查询,需求:title或者content任意一个字段能匹配到关键词即可

DSL 

使用dsl查询语句如下,构建一个query ,should只要一个匹配即可

POST /article/_search
  {
    "query":{
      "bool": {
        "should": [
          {"wildcard": {"title": "*路数*"}},
          {"wildcard": {"content": "*路数*"}}
        ]
      }
    }
  }

运行结果,可以查出数据

es多字段模糊匹配wildcardQuery,java实现

java api

翻译成java实现,首先使用的是restHighLevelClient文章来源地址https://www.toymoban.com/news/detail-506897.html

restHighLevelClient版

 @Override
    public <T> List<T> boolQuery(String indexName, String queryField,String queryValue, Class<T> beanClass) {

        // 查询的数据列表
        List<T> list = new ArrayList<>();
        try {
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            if (beanClass == Article.class && "title".equals(queryField) ) {
                BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
                boolQueryBuilder.should(new WildcardQueryBuilder("title", "*" + queryValue + "*"));
                boolQueryBuilder.should(new WildcardQueryBuilder("content", "*" + queryValue + "*"));
                searchSourceBuilder.query(boolQueryBuilder);

            }else {
                BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
                WildcardQueryBuilder field = QueryBuilders.wildcardQuery(queryField,  "*" +queryValue+ "*" );
                boolQueryBuilder.should(field);
                searchSourceBuilder.query(boolQueryBuilder);
            }
            searchSourceBuilder.size(100);


            // 创建查询请求对象,将查询对象配置到其中
            SearchRequest searchRequest = new SearchRequest(indexName);
            searchRequest.source(searchSourceBuilder);
            // 执行查询,然后处理响应结果
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            // 根据状态和数据条数验证是否返回了数据
            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
                SearchHits hits = searchResponse.getHits();
                for (SearchHit hit : hits) {
                    // 将 JSON 转换成对象
                    T bean = JSON.parseObject(hit.getSourceAsString(), beanClass);

                    list.add(bean);
                }
            }

        } catch (Exception e) {

        }

        return list;
    }

elasticsearchRestTemplate版


    @GetMapping("list/like")
    @SysOpLogAnnotation(content = "模糊匹配查询列表", operation = "list-like")
    public ApiResult queryByManyFieldLike(String queryField, String queryValue) {


        // 查询的数据列表
        List<Article> list = new ArrayList<Article>();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.should(new WildcardQueryBuilder("title", "*" + queryValue + "*"));
        boolQueryBuilder.should(new WildcardQueryBuilder("content", "*" + queryValue + "*"));

        NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).build();


        SearchHits<Article> search = elasticsearchRestTemplate.search(query, Article.class);

        List<SearchHit<Article>> searchHits = search.getSearchHits();
        for (SearchHit searchHit : searchHits) {
            list.add((Article) searchHit.getContent());
        }


        return new ApiResult().success(list);

    }

到了这里,关于es多字段模糊匹配wildcardQuery,java实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java查询es数据,根据指定id检索(in查询),sql权限过滤,多字段匹配检索,数据排序

    Java集成Elasticsearch,进行索引数据查询,并进行sql权限过滤,指定id检索(in查询),多字段匹配检索,数据排序。由于权限过滤是根据sql语句判断当前用户或其部门可查询的数据,所以采用以下方法: 1.通过sql过滤出当前用户可查询的数据id集合idsList; 2.将当前用户可查询的

    2024年02月22日
    浏览(65)
  • Elasticsearch 中基于wildcardQuery的模糊查询失效

    es中常用的模糊查询为: \\\"query\\\": {         \\\"wildcard\\\": {             \\\"testWord\\\": \\\"*测试数据*\\\"         }     } 对应java中es的API为:  一般情况下,这个模糊查询是没有问题的,但是当testWord的字段过长时,会导致es搜索失效。通过资料查询,这个文本的范围在256~32

    2024年02月05日
    浏览(37)
  • 用ES搜索关键字并且返回模糊字段高亮

       一般来说,各个网站,首页的搜索,都会有进行全文搜索的示例,并且把模糊匹配的多个数据进行标记(高亮),这样便于全局检索关键的数据,便于客户进行浏览。基于此,本文简单介绍这种功能基本java 的 实现    由于公司页面此功能隐藏了,本文就以接口调用返回看具

    2024年02月14日
    浏览(54)
  • ES multiMatchQuery 短语精确匹配多个字段

    multiMatchQuery 用于匹配多个字段,但是会对搜索进行分词 但是有时候需要精确匹配 (也就是对搜索不分词)多个字段 。怎么办呢 答案 是 用这个multiMatchQuery 方法进行查询。但是要指定type Java 代码示例

    2024年02月14日
    浏览(33)
  • ES中如何对text字段进行精确匹配

    在实际使用ES过程中,经常会遇到这样的问题: 既需要对一个字段进行全文检索,又要对该字段进行等值查询。 我们知道全文检索的字段类型需要设置为text,但是text字段类型又不支持term等值查询。那么怎么解决这个问题呢? 答案是 通过fields进行多字段配置 为了不同的目的

    2024年02月06日
    浏览(33)
  • Elasticsearch (ES) 搜索引擎: 搜索功能:搜索分页、搜索匹配、全文搜索、搜索建议、字段排序

    原文链接:https://xiets.blog.csdn.net/article/details/132348920 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) ES 搜索 API 官网文档:Search APIs 先创建一个索引,并写入一些文档用于搜索示例: 写入一些文档示例: 官网API:The _source option 搜索结果中的文档数据封装

    2024年02月08日
    浏览(50)
  • 两种实现模糊匹配的方法--python

    以下举例以同一个excel中, sheet2的词语去匹配sheet1中词语找模糊匹配结果来举例 导入数据,读取excel中sheet1(被匹配的目标词库),sheet2(需要进行匹配的词) 结果: ………………………………………………………… 把需要匹配的词语和目标词语做分词,对比分词匹配度判定关联

    2024年02月12日
    浏览(36)
  • 【多选模糊查询】多选模糊查询, 全文检索 和 正则匹配,任选其一 查出结果的3种实现

    1,3,4 是我们库里的,下拉框多选,选择了3个值 搜 1,搜出 前两条。 搜 2,搜出 第一条 和 第三条 搜2,4,搜出都会搜出来 参考:https://blog.csdn.net/qq120631157/article/details/130079470 注意配置: 前端的参数替换一下 参考文章:https://blog.csdn.net/qq120631157/article/details/130082537 重在实现

    2024年02月03日
    浏览(40)
  • Elasticsearch实现对同一字段既能精准查询也能模糊查询

     使用@MultiField注解给字段取别名并设置为keyword类型 dao层如下 实体类如下 模糊查询测试如下: 可以看到模糊查询content中一共有3条数据有我这个分词  精准查询如下:  可以看到精准查询就只有一条结果,符合精准查询。 注意:该方法需要版本支持,具体版本未知,但是在

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包