ElasticSearch 实现分词全文检索()_8

  本篇文章为你整理了ElasticSearch 实现分词全文检索()的详细内容,包含有 ElasticSearch 实现分词全文检索,希望能帮助你了解 ElasticSearch 实现分词全文检索。

   String json = JSON.toJSONStringWithDateFormat(sms, "yyyy-MM-dd HH:mm:ss"); FastJson 将日期格式化

  BulkRequest bulkRequest = new BulkRequest();

   Integer idx = 1;

   for (String json : jsonList) {

   IndexRequest request = new IndexRequest(indexName)

   .id(idx.toString()) //手动指定ID

   .source(json, XContentType.JSON);

   bulkRequest.add(request);

   idx++;

  
half_float:精度比float小一半

   scaled_float:根据一个long和scaled来表达一个浮点型, long=345,scaled=100 = 3.45

  时间类型:

   date:针对时间类型指定具体格式

  布尔类型:

   boolean:表达true和false

  二进制类型:

   binary:暂时支持Base64 encode string

  范围类型(Range datatypes):

   long_range: 赋值时,无序指定具体的内容,只需要存储一个范围即可,指定gt,此,gte,lte

   integer_range:同上

   double_range:同上

   float_range: 同上

   date_range:同上

   ip_range: 同上。

  经纬度类型:

   geo_point: 用来存储经纬度,结合定位的经纬度,来计算出距离

   ip: 可以存付IPV4、IPV6

  Completion 类型(Completion datatype):

   completion 提供自动补全建议

  

 

 

  

@Test

 

  void createSmsLogsIndex() throws Exception {

   String indexName = "sms-logs-index";

   RestHighLevelClient client = ESClient.getClient();

   //1. 准备索引的 settings

   Settings.Builder settings = Settings.builder()

   .put("number_of_shards", 1)

   .put("number_of_replicas", 1);

   //2. 准备索引的结构 Mappings

   XContentBuilder mappings = JsonXContent.contentBuilder()

   .startObject()

   .startObject("properties")

   .startObject("createDate").field("type", "date").field("format", "yyyy-MM-dd HH:mm:ss").endObject()

   .startObject("sendDate").field("type", "date").field("format", "yyyy-MM-dd HH:mm:ss").endObject()

   .startObject("longCode").field("type", "keyword").endObject()

   .startObject("mobile").field("type", "keyword").endObject()

   .startObject("corpName").field("type", "keyword").endObject()

   .startObject("smsContent").field("type", "text").field("analyzer", "ik_max_word").endObject()

   .startObject("state").field("type", "integer").endObject()

   .startObject("operatorld").field("type", "integer").endObject()

   .startObject("province").field("type", "keyword").endObject()

   .startObject("ipAddr").field("type", "ip").endObject()

   .startObject("replyTotal").field("type", "integer").endObject()

   .startObject("fee").field("type", "long").endObject()

   .endObject()

   .endObject();

   //3. 将 Settings 和 Mappings 封装到一个Request 对象中

   CreateIndexRequest request = new CreateIndexRequest(indexName)

   .settings(settings)

   .mapping(mappings);

   //4. 通过 client 对象去连接ES并执行创建索引

   CreateIndexResponse resp = client.indices().create(request, RequestOptions.DEFAULT);

   //5. 输出

   System.out.println("resp:" + resp.toString());

  

 

  创建数据文档

  

@Test

 

  void batchCreateSmsDoc() throws Exception {

   String indexName = "sms-logs-index";

   RestHighLevelClient client = ESClient.getClient();

   //短信内容

   Map Integer, String contentMap = new HashMap ();

   contentMap.put(1, "【阿里云】尊敬的vipsoft:您有2台云服务器ECS配置升级成功。如有CPU、内存变更或0Mbps带宽升级,您需要在ECS控制台手动重启云服务器后才能生效。");

   contentMap.put(2, "为更好地为您提供服务,温馨提醒:您本月有1次抽奖机会,赢取大额通用流量,月月抽月月领,点击掌厅链接 原URL:http://wap.js.10086.cn/Mq 快来试试你的运气吧,如本月已参与请忽略【江苏移动心级服务,让爱连接】");

   contentMap.put(3, "国家反诈中心提醒:公检法机关会当面向涉案人员出示证件或法律文书,绝对不会通过网络给当事人发送通缉令、拘留证、逮捕证等法律文书,并要求转账汇款。\n" +

   "切记:公检法机关不存在所谓“安全账户”,更不会让你远程转账汇款!");

   contentMap.put(4, "【江苏省公安厅、江苏省通信管理局】温馨提示:近期利用苹果手机iMessage消息冒充熟人、冒充领导换号、添加新微信号等诈骗形式多发。如有收到类似短信,请您谨慎判断,苹果手机用户如无需要可关闭iMessage功能,以免上当受骗。");

   contentMap.put(5, "多一点快乐,少一点懊恼,不管钞票有多少,只有天天开心就好,累了就睡觉,生活的甜苦,自己来调味。收到信息就要开心的笑");

   contentMap.put(6, "黄金周好运每天交,我把祝福来送到:愿您生活步步高,彩票期期中,股票每天涨,生意年年旺,祝您新年新景象!");

   contentMap.put(7, "【阿里云】当你手机响,那是我的问候;当你收到短信,那有我的心声;当你翻阅短信,那有我的牵挂;当你筹备关机时,记得我今天说过周末快乐!");

   contentMap.put(8, "我刚去了一趟银行,取了无数的幸福黄金好运珠宝平安翡翠成功股票健康基金。嘘!别作声,统统的送给你,因为我想提“钱”祝你国庆节快乐!");

   contentMap.put(9, "一个人的精彩,一个人的打拼,一个人的承载,一个人的舞蹈。光棍节送你祝福,不因你是光棍,只因你生活色彩。祝你:快乐打拼,生活出彩!");

   contentMap.put(10, "爆竹响激情燃放,雪花舞祥风欢畅,烟火腾期待闪亮,感动涌心中激荡,心情美春节冲浪,愿景好心中珍藏,祝与福短信奉上:祝您身体健康,兔年吉祥!");

   //准备一个JSON数据

   List String jsonList = new ArrayList ();

   for (int i = 1; i = 10; i++) {

   //准备一个JSON数据

   SmsLogs sms = new SmsLogs();

   sms.setMobile("138" + RandomUtil.randomInt(11111111, 99999999));

   sms.setSmsContent(contentMap.get(i));

   sms.setState(i % 2);

   sms.setOperatorld(i % 3);

   if (i % 2 == 0) {

   sms.setProvince("江苏");

   sms.setLongCode("张三" + i);

   sms.setCorpName("微软" + i);

   else{

   sms.setProvince("上海");

   sms.setLongCode("李四" + i);

   sms.setCorpName("阿里" + i);

   sms.setIpAddr("172.16.0." + i);

   sms.setFee(RandomUtil.randomInt(10, 50));

   sms.setSendDate(DateUtil.offsetMinute(DateUtil.date(), -2));

   sms.setCreateDate(DateUtil.date());

   String json = JSON.toJSONStringWithDateFormat(sms, "yyyy-MM-dd HH:mm:ss"); //FastJson 将日期格式化

   jsonList.add(json);

   //准备一个Request对象

   BulkRequest bulkRequest = new BulkRequest();

   Integer idx = 1;

   for (String json : jsonList) {

   IndexRequest request = new IndexRequest(indexName)

   .id(idx.toString()) //手动指定ID

   .source(json, XContentType.JSON);

   bulkRequest.add(request);

   idx++;

   //通过 Client 对象执行添加

   BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);

   //输入结果

   System.out.println(bulk.toString());

  

 

  以上就是ElasticSearch 实现分词全文检索()的详细内容,想要了解更多 ElasticSearch 实现分词全文检索的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: