概述
弹性搜索是一个实时分布式和开源全文搜索和分析引擎。它是基于文档的搜索平台, 具有快速搜索功能。它针对大海捞针问题而不是一致性或原子性进行了优化。
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 数据项目的弹性搜索集成。请一定要通过评论让我知道你的意见。如果可以的话, 很乐意回答你的问题。