elasticsearch5.11集成ik+pinyin分词java api

1.创建index并初制定分词

由于官方提供的XContentBuilder工具没有直接写json来的直接,这里我就直接把setting用json创建

/**
	 * 创建索引
	 * @param indexName	索引名
	 */
	public static void createIndex(String indexName){
		try {
			EsTools esTools = new EsTools();
			TransportClient client = esTools.getClient();
			/**1.创建索引映射*/
			client.admin().indices()
			.prepareCreate(indexName).setSettings("{\"index\" : "
													+ "{\"analysis\" : "
														+ "{\"analyzer\" : "
															+ "{\"ik_pinyin_analyzer\" : "
																+ "{\"tokenizer\" : \"ik_max_word\", "
																+ "\"filter\" : [\"my_pinyin\",\"word_delimiter\"]}},"
																+ "\"filter\" : {\"my_pinyin\" : "
																+ "{\"type\" : \"pinyin\", \"first_letter\" : \"prefix\",\"padding_char\" : \" \" }}}}}").get();
			System.out.println("索引创建成功");
			
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("索引创建失败");
		}
	}



2.创建type并设置mapping

/**
	 * 创建类型并设置mapping
	 * @param indexName	索引名
	 * @param typeName	类型名
	 */
	public static void createMapping(String indexName,String typeName,String columnName){
		EsTools esTools = new EsTools();
		TransportClient client = esTools.getClient();
		//创建mapping
		PutMappingRequest mapping = Requests.putMappingRequest(indexName).type(typeName)
				.source("{\""+ typeName +"\": {\"properties\": "
						+ "{\"name\": {\"type\": \"string\",\"analyzer\": \"ik_pinyin_analyzer\"}}}}");
		
		client.admin().indices().putMapping(mapping).actionGet();
		System.out.println("mapping创建成功");
	}


这里需要提到的是:first_letter即拼音首字母,可以设置为(默认为none): prefix , append , only 和none,如“中国”的分词效果分别为”zg zhong guo","zhong guo zg","zg","zhong guo"


3.插入数据

/**
	 * 插入数据
	 * @param indexName	索引名
	 * @param typeName	类型
	 * @param column	列
	 * @param value	值
	 */
	public static void setDate(String indexName,String typeName,String column,String value){
		try {
			EsTools esTools = new EsTools();
			TransportClient client = esTools.getClient();
			/**2.插入数据*/
			IndexResponse response = client.prepareIndex(indexName,typeName)
			        .setSource(jsonBuilder()
			                    .startObject().field(column, value).endObject()
			                  )
			        .setId(UUID.randomUUID().toString()+"")
			        .get();
			System.out.println("插入成功");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("插入失败");
		}
		
	}



4.查询并高亮显示

/**
	 * 查询打印
	 * @param index	索引
	 * @param type	类型
	 * @param column	列
	 * @param key	关键词
	 * @throws UnknownHostException
	 */
	public static void findPrint(String index,String type,String column,String key) throws UnknownHostException{
		// 设置集群名称
        Settings settings = Settings.builder()
                .put("cluster.name", "my-application").build();
        // 创建client
		TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(
                        InetAddress.getByName("127.0.0.1"), 9300));
        QueryBuilder matchQuery = QueryBuilders.matchQuery(column, key);
        HighlightBuilder hiBuilder=new HighlightBuilder();
        hiBuilder.preTags("<h2>");
        hiBuilder.postTags("</h2>");
        hiBuilder.field(column);
        // 搜索数据
        SearchResponse response = client.prepareSearch(index)
        		.setTypes(type)
                .setQuery(matchQuery)
                .highlighter(hiBuilder)
                .execute().actionGet();
        //获取查询结果集
        SearchHits searchHits = response.getHits();
        System.out.println("共搜到:"+searchHits.getTotalHits()+"条结果!");
        //遍历结果
        for(SearchHit hit:searchHits){
            System.out.println("String方式打印文档搜索内容:");
            System.out.println(hit.getSourceAsString());

            if(null != hit && null != hit.getHighlightFields() && hit.getHighlightFields().size() > 0 ){
            	System.out.println("Map方式打印高亮内容");
                System.out.println(hit.getHighlightFields());
            	
            	System.out.println("遍历高亮集合,打印高亮片段:");
                Text[] text = hit.getHighlightFields().get(column).getFragments();
                for (Text str : text) {
                    System.out.println(str.string());
                }
            }
            
        }
	}



调用


public static void main(String[] args) throws IOException{
		String indexName = "index3";
		String typeName = "t3";
		String columnName = "name";
		
//		//创建索引
		createIndex(indexName);
//		
//		//创建类型并设置mapping
		createMapping(indexName,typeName,columnName);
//		
//		//插入数据
		setDate(indexName,typeName,columnName,"曹操官渡大破袁绍,为吞并河北打开了胜利的大门");
		
		//查询数据
		findPrint(indexName,typeName,columnName,"w");
    }





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值