在Java中,ik分詞器和elasticsearch的結合是非常常見的。ik分詞器是一款中文分詞器,支持細粒度和粗粒度兩種分詞模式,使用簡單、效果好。而elasticsearch是一個基于Lucene的搜索引擎,提供了非常豐富的搜索功能。
// ik分詞器的使用示例 Analyzer analyzer = new IKAnalyzer(true); String text = "中國人民站起來了"; TokenStream ts = analyzer.tokenStream(null, text); ts.reset(); while (ts.incrementToken()) { CharTermAttribute term = ts.getAttribute(CharTermAttribute.class); // term.toString() 就是分詞結果 System.out.println(term.toString()); }
使用ik分詞器進行分詞時,我們需要提供一個文本串,并將分詞結果按順序輸出。可以看到,使用ik分詞器進行分詞非常簡單,只需要創建一個Analyzer對象,提供文本串并遍歷分詞結果即可。
// elasticsearch中使用ik分詞器進行搜索 QueryBuilder queryBuilder = QueryBuilders .matchQuery("content", "中國人民"); SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(queryBuilder); searchSourceBuilder.from(0); searchSourceBuilder.size(10); searchRequest.source(searchSourceBuilder); // 獲取ik分詞器 MapanalyzerMap = new HashMap<>(); analyzerMap.put("ik_max_word", new IKAnalyzer(true)); analyzerMap.put("ik_smart", new IKAnalyzer(false)); searchSourceBuilder.aggregation( AggregationBuilders .terms("content_agg") .field("content") .subAggregation( AggregationBuilders .topHits("top_hits") .fetchSource(new String[]{"title", "content"}, null) .size(1) .sort("time", SortOrder.DESC) ) .order(BucketOrder.count(false)) .size(10) .analyzer("ik_smart") );
在elasticsearch中,我們可以將ik分詞器作為分詞器使用。比如,下面的代碼片段中,我們查詢index索引中包含"中國人民"的文檔,并使用ik_smart分詞器對content字段進行分詞和聚合。可見使用ik分詞器進行搜索同樣非常簡單,只需要在SearchSourceBuilder中指定一下分詞器即可。
上一篇html的頁面倒計時代碼
下一篇vue開發私活報價