概述

弹性搜索是一个实时分布式和开源全文搜索和分析引擎。它是基于文档的搜索平台, 具有快速搜索功能。它针对大海捞针问题而不是一致性或原子性进行了优化。

elasticserach 是一个巨大的话题, 所以在这个博客中, 我要保持它非常简单, 在101级。在这个博客中, 我将介绍如何下载弹性搜索并进行设置。此外, 如何使用弹簧启动弹簧数据弹性搜索项目与弹性搜索引擎集成。

如何设置弹性搜索

截至今天, 弹性搜索的最新版本是 6.5. x。但是, 我将仅下载2.4.4 版本。原因是, 截至目前, 弹簧数据弹性搜索项目仅与2.4.4 版本兼容。如果您想了解有关兼容性的更多详细信息, 请检查此链接: spring-data-elastycsearch—spring 启动—版本矩阵

如果仍要使用最新的弹性搜索 5. x 或 6. x, 则需要直接将 spring 与传输客户端节点客户端api 一起使用, 而不是弹簧数据弹性搜索.请按照以下步骤下载并设置您的弹性搜索引擎。

第1步-转到弹性的官方网站: https://www.elastic.co/downloads/past-releases

第2步-选择弹性搜索在下拉列表中, 然后版本为 2.4.4, 然后单击下载按钮。

第3步-它会给你的选项, 如果你想下载作为 zip, tar, rpm。您可以根据您的方便选择。我选择了 zip 格式作为在窗口上使用它。

步骤 4 -解压缩下载的内容, 并转到 bin 文件夹。将有一个名为的文件 elasticsearch.bat

第5步-通过命令提示符在 windows 操作系统上运行此文件, 它将为您启动弹性搜索引擎。一旦启动, 它将开始侦听端口9200。因此, url 将 http://localhost:9200/此外, 端口9300将作为群集节点公开。端口9200用于 rest 通信, 可由 java 或任何其他语言使用, 9200 端口用于 elasticsearch 的群集节点之间的通信。java 还可以使用传输协议连接到此群集节点。

第6步-测试, 以验证它是否正确启动使用该 curl 命令启动 url。您可以在 windows 上使用 powershell。

curl http://localhost:9200/

curl http://localhost:9200/


StatusCode        : 200
StatusDescription : OK
Content           : {
                      "name" : "Rl'nnd",
                      "cluster_name" : "elasticsearch",
                      "cluster_uuid" : "9m9VQLE9SIqcmbn9nb19Eg",
                      "version" : {
                        "number" : "2.4.4",
                        "build_hash" : "fcbb46dfd45562a9cf00c604b30849a6dec6...
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 360
                    Content-Type: application/json; charset=UTF-8

                    {
                      "name" : "Rl'nnd",
                      "cluster_name" : "elasticsearch",
                      "cluster_uuid" : "9m9VQLE9SIqcmbn9nb19Eg",
                      "versio...
Forms             : {}
Headers           : {[Content-Length, 360], [Content-Type, application/json; charset=UTF-8]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml

在开发应用程序之前, 让我们先了解一下如何 ElasticsearchTemplate 工作和 ElasticsearchRepository 工作。

弹性搜索模板-它是实现 ElasticsearchOperations .它比 ElasticsearchRepository crud 操作更强大。它具有创建、删除索引、批量上传的操作。它也可以进行聚合搜索。

弹性搜索存储库-如果我们定义一个接口 ElasticsearchRepository , 它扩展了由 spring 数据弹性搜索提供的接口, 它将自动为该文档提供 crud 操作。例如, UserRepository 下面通过扩展 “用户” 文档定义了界面 ElasticsearchRepository 。现在, 所有的查找、保存、删除和更新默认操作都可以通过用户文档完成。如果您不知道弹性搜索中的文档是什么, 请继续阅读以获得更深入的解释。

@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
}

上面的代码扩展 ElasticsearchCrudRepository 了最终扩展存储库接口的内容。此存储库接口是 spring 数据框架的标准功能。没有必要为此接口提供实现细节。您还可以使用批注编写自定义查询 @Query

这两种方法都使用传输客户端或节点客户端

先决条件

  • 已安装 java 1。8

  • 日食或 visual studio 代码 ide

  • Maven

马文依赖关系

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

配置

application.properties需要具有弹簧数据属性, 这些属性由 ElasticsearchTemplate 引擎使用并 ElasticsearchRepository 连接引擎。我使用了传输客户端属性 (如群集节点和索引名称) 来连接弹性搜索引擎。

#application.properties

# Local Elasticsearch config
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=elasticsearch

elasticsearch.index.name=my_index
elasticsearch.user.type=user

# App config
server.port=8102
spring.application.name=BootElastic

映射

在弹性搜索中,索引类似于 rdbms 中的 db,而 mappingsss类型类似于 rdbms 中的表。文档是属于类型并驻留在索引中的字段的集合。spring 数据提供了用于 @Document 创建文档的注释 slike。在这里, 我们将 “用户” 定义为具有 “my _ index” 索引和 “用户” 类型的文档它将使用 UserDAOImpl to 允许 ElasticserachTemplate 与弹性搜索引擎进行交互。

@RestController
public class UserController {

    @Autowired
    private UserDAO userDAO;

    @RequestMapping("/all")
    public List<User> getAllUsers() {
        return userDAO.getAllUsers();
    }
     @RequestMapping(value = "/new", method = RequestMethod.POST)
    public User addUsers(@RequestBody User user) {
        userDAO.addNewUser(user);
        return user;
    }
  --- Other methods
}

UserDAOImpl -此类初始化 ElasticsearchTemplate 并使用该 queryForList 方法检索数据。

@Repository
public class UserDAOImpl implements UserDAO {

    private final Logger LOG = LoggerFactory.getLogger(getClass());

    @Value("${elasticsearch.index.name}")
    private String indexName;

    @Value("${elasticsearch.user.type}")
    private String userTypeName;

    @Autowired
    private ElasticsearchTemplate esTemplate;

    @Override
    public List<User> getAllUsers() {
        SearchQuery getAllQuery = new NativeSearchQueryBuilder()
                .withQuery(matchAllQuery()).build();
        return esTemplate.queryForList(getAllQuery, User.class);
    }
  // Other methods
}

另一个控制器是 UserRepositoryConroller 。这用于 UserRepository 与弹性搜索引擎进行交互。

@RestController
@RequestMapping("/repo")
public class UserRepositoryController {

    @Autowired
    private UserRepository userRepository;

    @RequestMapping("/all")
    public List<User> getAllUsers() {
        List<User> users = new ArrayList<>();
        userRepository.findAll().forEach(users::add);
        return users;
    }
  //Other methods
}

此存储库类扩展了 ElasticsearchRepository ElasticsearchCrudRepository 内部扩展的类-> PagingAndSortingRepository .

@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
}

您可以在github上找到完整的代码。

构建应用程序

可以使用 maven 命令生成应用程序。

mvn clean install将建立代码, 并创建弹性搜索 0.0.1-snapshot jar 文件。

运行应用程序

java -jar  target/elasticsearch-0.0.1-SNAPSHOT.jar 将启动应用程序。应用程序将侦听应用程序. 属性文件中定义的端口8102 .

测试应用程序

测试使用的用户控制器ElasticsearchTemplate

步骤 1 -添加新用户。使用此 rest api url 添加新用户: http://localhost:8102/new

在请求正文中添加 json 数据。

{
  "name": "Sumit",
   "userSettings": {
   "gender" : "male",
   "occupation" : "CA",
   "hobby" : "chess"
   }
}

第2步-检查响应输出如下所示:

{
    "userId": "AWdj-3KcTJbZRlQtLZfO",
    "name": "Sumit",
    "creationDate": 1543570682521,
    "userSettings": {
        "gender": "male",
        "occupation": "CA",
        "hobby": "chess"
    }
}

第3步-要检索所有用户, 请 http://localhost:8102/all 使用

{
        "userId": "AWdj-3KcTJbZRlQtLZfO",
        "name": "Sumit",
        "creationDate": 1543570682521,
        "userSettings": {
            "gender": "male",
            "occupation": "CA",
            "hobby": "chess"
        }
    },
    {
        "userId": "AWdZuKFRgzULDLBu_Y0c",
        "name": "Suresh",
        "creationDate": 1543398531296,
        "userSettings": {}
    }

测试使用的用户重组控制器ElasticsearchRepository

步骤 1 -添加新用户。使用此 rest api url 添加新用户: http://localhost:8102/repo/new

在请求正文中添加 json 数据, 就像我们对前面的测试用例所做的那样。

第2步-检查响应。您将看到使用此文档唯一的用户创建新用户 userId

我在代码中还放了许多其他 api, 您可以使用这些 api。它将展示如何 ElasticsearchTemplate 使用索引, 如何按字段名称进行搜索。使用 ElasticsearchRepository 时, 您也可以通过 userId 搜索。

我们还可以通过多种其他方式连接到弹性搜索引擎。我将在这里提供关于它们的简要介绍, 因为这需要整个新的博客来详细解释。

与传输客户端的弹簧启动-如上所述, 如果您想使用最新的弹性搜索引擎 5. x 或 6. x, spring 数据弹性搜索到现在将不支持它。但 elasticsearch 提供 RestHighLevelClient 了与最新版本配合良好的类, 并使用 RestClient 该类配置群集的主机和端口。它使用与 index() IndexRequest 输入的方法来创建文档。它使用与 get() 输入的方法 GetRequest 来搜索文档。它也有 update() delete() 和方法。

node. js -如果您不是 java\ spring 风扇, 则也可以选择使用 node. js。你需要做的是 elasticsearch get-json 下载和模块使用 npm。弹性搜索有一个客户端模块 , 它可以配置弹性搜索服务器群集的主机和端口。此客户端具有 create() 创建索引和 index() 将文档放入该索引的方法。

这就是与此 spring 数据项目的弹性搜索集成。请一定要通过评论让我知道你的意见。如果可以的话, 很乐意回答你的问题。

Comments are closed.