文章目錄
- 效果展示
- 二、使用步驟
- 1.引入maven依賴
- 2. 撰寫spplication.properties
- 3.配置客戶端
- 4.高亮搜索
- 5.轉換成物體物件
- 總結
效果展示
雖然看起來巴適,但是挺簡單的!

📝 英文檢索

📝 中文單字檢索

二、使用步驟
1.引入maven依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2. 撰寫spplication.properties
elasticsearch.host=localhost
elasticsearch.port=9200
3.配置客戶端
/**
* 配置客戶端
* @author BreezAm
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class EsConfig extends AbstractElasticsearchConfiguration {
private String host;
private int port;
@Override
public RestHighLevelClient elasticsearchClient() {
RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
return new RestHighLevelClient(builder);
}
}
4.高亮搜索
/**
* 文章搜索
*
* @author BreezAm
* @email lx90352@163.com
* @date 2021-08-15 18:05:46
*/
@Service
public class EsSearchService {
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 高亮搜索
*
* @param indices 索引名稱
* @param name 搜索的欄位 高亮顯示的欄位
* @param key 搜索的關鍵字
* @return
* @throws IOException
*/
public List<Map<String, Object>> search(String indices, String name, String key) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
SearchRequest request = new SearchRequest();
request.indices(indices);
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder queryBuilder = QueryBuilders.termQuery(name, key);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.requireFieldMatch(false);
highlightBuilder.preTags("<font color='red' size=4>");
highlightBuilder.postTags("</font>");
highlightBuilder.field(name);
builder.highlighter(highlightBuilder);
builder.query(queryBuilder);
request.source(builder);
SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Map<String, HighlightField> fields = hit.getHighlightFields();
HighlightField title = fields.get(name);
if (title != null) {
Text[] fragments = title.getFragments();
String t = "";
for (Text text : fragments) {
t = text + t;
}
sourceAsMap.put(name, t);
}
list.add(sourceAsMap);
}
return list;
}
}
5.轉換成物體物件
private List<Article> getArticles(String key) throws IOException {
List<Article> list = new ArrayList<>();
List<Map<String, Object>> search = esSearchService.search("article", "title", key);
for (Map<String, Object> map : search) {
Article article = new Article();
article.setId(Integer.valueOf(map.get("id").toString()));
article.setTitle(map.get("title").toString());
article.setCoverUrl(map.get("coverUrl").toString());
article.setContent(map.get("content").toString());
article.setPublishDate(stringToDate(map.get("publishDate").toString()));
article.setReadNum(Integer.valueOf(map.get("readNum").toString()));
article.setCommentNum(Integer.valueOf(map.get("commentNum").toString()));
article.setSummary(map.get("summary").toString());
list.add(article);
}
return list;
}
總結
本文簡單實作了Elasticsearch的一個應用場景,其中還有些問題,那就是對中文只能單字搜索,英文可以進行單詞檢索,如果要對中文進行多字檢索,那就需要使用中文分詞器,推薦一款中文分詞器:elasticsearch-analysis-ik
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295354.html
標籤:其他
