SpringCloud整合Elastic Search(二)

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官方文档。

你可能感兴趣的:(后端,Java,spring,cloud,elasticsearch,java)