1. SpringCloud完整配置Elastic Search
spring:
data:
elasticsearch:
cluster-name: my-elasticsearch-cluster # 集群名称
cluster-nodes: localhost:9300 # 集群节点地址
repositories:
enabled: true # 开启 Elasticsearch Repository 支持
properties:
path:
logs: /var/logs/elasticsearch # 指定 Elasticsearch 日志路径
http:
enabled: true # 开启 HTTP 协议支持
compression: true # 开启压缩传输
max-initial-line-length: 2k # 设置最大初始行长度
max-header-size: 8k # 设置最大请求头大小
2. Elastic Search索引增删改查
下面是一个简单的示例,在Spring Boot中使用Spring Data Elasticsearch来执行基本的索引操作(增加、删除、修改和查询):
@Service
public class BookService {
@Autowired
private ElasticsearchTemplate esTemplate;
@Autowired
private BookRepository bookRepository;
/**
* 添加文档
*/
public void add(Book book) {
IndexQuery indexQuery = new IndexQueryBuilder().withId(book.getId()).withObject(book).build();
esTemplate.index(indexQuery);
}
/**
* 删除文档
*/
public void delete(String id) {
esTemplate.delete(Book.class, id);
}
/**
* 更新文档
*/
public void update(Book book) {
IndexQuery indexQuery = new IndexQueryBuilder().withId(book.getId()).withObject(book).build();
esTemplate.index(indexQuery);
}
/**
* 查询文档
*/
public List<Book> search(String query) {
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("title", query))
.should(QueryBuilders.matchQuery("author", query));
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.build();
return esTemplate.queryForList(nativeSearchQuery, Book.class);
}
}
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {}
使用Elasticsearch的场景包括但不限于搜索引擎、日志分析和实时分析等。
3.Elastic Search分词器
下面是一个简单的示例,在Spring Boot中使用Elasticsearch的分词器:
@Service
public class AnalyzerService {
@Autowired
private ElasticsearchOperations esTemplate;
/**
* 使用自定义分词器进行分词
*/
public AnalyzeResponse analyze(String text) {
AnalyzeRequest request = AnalyzeRequest.withIndexAnalyzer("my_index", "my_analyzer", text);
return esTemplate.getClient().admin().indices().analyze(request).actionGet();
}
}
在Elasticsearch中,分词器用于将文本分成单独的单词,这些单词可以用于搜索、聚合和排序等目的。使用自定义分词器可以更好地控制分词结果,从而提高搜索准确性。分词器的应用场景包括但不限于搜索引擎、文本分类和实时分析等。完整代码请参见Elasticsearch官方文档。