对于字符串在搜索匹配的时候,字符串是数字的话需要匹配的是精准匹配,如果是部分匹配字符串的话,需要进行处理,把数字型字符串作为一个字符中的数组表示插入之后显示如下:

如果插入之后显示如画线部分的话,则表示精准匹配

在用clien的java api插入的时候:

String json=null;
            if (req.getTagId() != null) {
            String[] test = req.getTagId().split(",");
            json = JSON.toJSONString(test);
            System.out.println(json);
            }else {
             json = "{"+"\"location\":"+"\""+req.getLatitude()+","+req.getLongitude()+"\""+","
                            +"\"id\":"+"\""+req.getId()+"\""+","+"\"union_id\":"+"\""+req.getUnionId()+"\""+","
                            +"\"tag_id\":"+"\""+req.getTagId()+"\""+","+"\"tag_name\":"+"\""+req.getTagName()+"\""+","
                            +"\"nickname\":"+"\""+req.getNickname()+"\""+","+"\"phone\":"+"\""+req.getPhone()+"\""+","
                            +"\"name\":"+"\""+req.getName()+"\""+","+"\"age\":"+"\""+req.getAge()+"\""+","
                            +"\"code\":"+"\""+req.getCode()+"\""+","+"\"gender\":"+"\""+req.getGender()+"\""+","
                            +"\"province\":"+"\""+req.getProvince()+"\""+","+"\"city\":"+"\""+req.getCity()+"\""+","
                            +"\"coountry\":"+"\""+req.getCountry()+"\""+","+"\"avatarUrl\":"+"\""+req.getAvatarUrl()+"\""+","
                            +"\"app_code\":"+"\""+req.getAppCode()+"\""+"}";
                            System.out.println(json);
            }

通过这种插入方式,默认的是json,在json验证的时候显示的json,而在table格式下不能显示:因此通过类的字符形式插入在显示table格式:

public boolean insertIndexUserDoc(String indexname, String type,List<UserEntity> list)
            throws ApplicationException, Exception {
        // TODO Auto-generated method stub
        String location=null;
        JestClient jestHttpClient = Connection.getClient();
        JestResult jr = null;
        try {
            
//        Bulk.Builder bulk = new Bulk.Builder().defaultIndex(indexname)
//                .defaultType(type);
        for(UserEntity req:list){
            UserEntity user = new  UserEntity();
            user.setId(req.getId());
            user.setUnionId(req.getUnionId());
            user.setTagName(req.getTagName());
            user.setLocation(req.getLatitude().toString()+","+req.getLongitude().toString());
            user.setAge(req.getAge());
            user.setPhone(req.getPhone());
            user.setCode(req.getCode());
            user.setGender(req.getGender());
            user.setProvince(req.getProvince());
            user.setCity(req.getCity());
            user.setCountry(req.getCountry());
            user.setAppCode(req.getAppCode());
            user.setAvatarUrl(req.getAvatarUrl());
            user.setNickname(req.getNickname());
            if (req.getTagId()!=null){
                  String[] mids=req.getTagId().split(",");
                  user.setTagId(JSON.toJSONString(mids));;
            }
             jr=jestHttpClient.execute(new Index.Builder(user)
                .index("omouserinfo").id(user.getId())
                .type("omouserinfo").build());
             boolean flag = jr.isSucceeded();
                System.out.println(flag);
        }
        return true;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return false;
        }    
    }

其中,      jr=jestHttpClient.execute(new Index.Builder(user)
                .index("omouserinfo").id(user.getId())
                .type("omouserinfo").build());这个设置的id,如果不设置,在批量插入处理的时候,id第一次自动分配,后面容易冲突

第一段
代码如果批量插入时候可以不设置id,由于id可以在一次之后自增id,不需要设置id;因此,在批量单条处理的时候需要加id。执行之后如下:

在查询的时候实现精准匹配:

做查询的时候需要对字符串进行处理如下:

ublic static void main(String[] args) {
        int from = 0, size = 100;
        String serviceTypeIds = "823,770,1182,1431,1432";
        System.out.println(serviceTypeIds);
        StringBuilder stringBuilder = new StringBuilder("{")
                .append("\"from\":")
                .append(from)
                .append(",")
                .append("\"size\":")
                .append(size)
                .append(",")
                .append("\"query\" : {")
                .append("\"match_all\" : {}")
                .append("},")
                .append("\"filter\" : {\"and\" : [")
                .append(org.apache.commons.lang3.StringUtils
                        .isBlank(serviceTypeIds) ? "" : (serviceTypeIds
                        .contains(",") ? "{\"query_string\" : {\"query\" : \""
                        + StringUtils.replace(serviceTypeIds, ",", " or ")
                        + "\",\"fields\":[\"tagId\"]}}"
                        : "{\"term\" : {\"tagId\" : " + serviceTypeIds
                                + "}},"));
        System.out.println(stringBuilder);
    }

花了一上午的时间,做出来,小小激动一下啊!

打印出来的json如下:

{
  "from": 0,
  "size": 100,
  "query": {
    "match_all": {}
  },
  "filter": {
    "query_string": {
      "query": "2 or1 ",
      "fields": [
        "tagId"
      ]
    }
  }
}

查询结果如下:

elasticsearch插入索引文档 对数字字符串的处理的更多相关文章

  1. 关于Elasticsearch单个索引文档最大数量问题

    因为ElasticSearch是一个基于Lucene的搜索服务器.Lucene的索引有个难以克服的限制,导致Elasticsearch的单个分片存在最大文档数量限制,一个索引分片的最大文档数量是20亿 ...

  2. Elasticsearch必知必会的干货知识一:ES索引文档的CRUD

    ​ 若在传统DBMS 关系型数据库中查询海量数据,特别是模糊查询,一般我们都是使用like %查询的值%,但这样会导致无法应用索引,从而形成全表扫描效率低下,即使是在有索引的字段精确值查找,面对海量数 ...

  3. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  4. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

  5. Elasticsearch 索引文档的增删改查

    利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...

  6. 详细描述一下 Elasticsearch 索引文档的过程 ?

    面试官:想了解 ES 的底层原理,不再只关注业务层面了. 解答: 这里的索引文档应该理解为文档写入 ES,创建索引的过程. 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流 ...

  7. 详细描述一下 Elasticsearch 索引文档的过程 ?

    这里的索引文档应该理解为文档写入 ES,创建索引的过程. 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程. 记住官方文档中的这个图. 第一步:客户写集群某节点写入数据, ...

  8. elasticsearch 官方监控文档 老版但很有用

    https://zhaoyanblog.com/page/1?s=elasticsearch 监控每个节点(jvm部分) 操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细. ...

  9. Elasticsearch 7.x文档基本操作(CRUD)

    官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html 1.添加文档 1.1.指定文档ID PUT ...

随机推荐

  1. python中的异常处理try/except/finally/raise

    异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确 ...

  2. [Selenium] Selenium WebDriver 的下载和安装

    为配合较为广泛使用Java 语言的程序员,仅以WebDriver 的Java语言绑定进行讲解. 步骤1:下载并安装Java开发环境 1)在系统中安装JDK(Java开发工具吧,Java Develop ...

  3. [ZJOI 2008] 骑士

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1040 [算法] 首先 , 题目中互相讨厌的关系构成了一棵基环森林 用拓扑排序找出环 ...

  4. 洛谷P3354 [IOI2005]Riv 河流——“承诺”DP

    题目:https://www.luogu.org/problemnew/show/P3354 状态中要记录一个“承诺”,只需相同承诺之间相互转移即可: 然后就是树形DP的套路了. 代码如下: #inc ...

  5. css 样式引入的方法 link 与import的区别

    <link> 元素所参考的样式用户可以自由的选择加以改变,而导入的样式表单就自动的与剩下的样式表融合在一起了 CSS与HTML文档结合的4中方法:1 使用<link>元素链接到 ...

  6. RESTEasy使用json返回的例子

    创建一个json的model类: package com.howtodoinjava.model; import java.io.Serializable; import javax.xml.bind ...

  7. 03_主线程联网问题&ANR&子线程不能修改UI

    如果不使用HAXM,恐怕网页源码查看器无法获取servlet的源码.初步猜测是安卓模拟器运行速度太慢了.如果CPU不支持VT-x的话,HAXM是安装不上的.所以可以先开启VT-x. 可以参考几篇文章h ...

  8. UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)

    题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了. 析:开始吧,并没有读对题意, ...

  9. C++开发工程师面试题库 150~200道

    151.简述需求分析的过程和意义 152.网状.层次数据模型与关系数据模型的最大的区别是什末 153.软件质量保证体系是什末 国家标准中与质量保证管理相关的几个标准是什末 编号和全称是什末号和全称是什 ...

  10. 严格次小生成树(lca + 倍增)

    题目描述 小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得 ...