当前位置:  首页>> 技术小册>> ElasticSearch零基础到实战

本文将介绍ElasticSearch的全文搜索API,并提供代码示例帮助读者更好地理解和使用该功能。

环境准备
在开始使用ElasticSearch的全文搜索API之前,我们需要准备一个ElasticSearch实例。这里我们以Docker容器方式搭建一个ElasticSearch实例:

  1. docker run --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:7.12.1

上述命令会在本地启动一个ElasticSearch实例,并将9200端口映射到本地,方便我们通过API进行访问。

创建索引
在使用ElasticSearch的全文搜索API之前,我们需要先创建一个索引。索引是ElasticSearch中用于存储和检索文档的容器,类似于关系型数据库中的表。

下面是一个创建名为“my_index”的索引的示例代码:

  1. import requests
  2. url = "http://localhost:9200/my_index"
  3. headers = {
  4. "Content-Type": "application/json"
  5. }
  6. data = """
  7. {
  8. "settings": {
  9. "number_of_shards": 1,
  10. "number_of_replicas": 0
  11. },
  12. "mappings": {
  13. "properties": {
  14. "title": {
  15. "type": "text"
  16. },
  17. "content": {
  18. "type": "text"
  19. }
  20. }
  21. }
  22. }
  23. """
  24. response = requests.put(url, headers=headers, data=data)
  25. print(response.json())

上述代码通过HTTP PUT请求向ElasticSearch实例的“/my_index”路径发送一个JSON格式的数据,该数据定义了索引的设置和映射。其中,“number_of_shards”定义了索引的主分片数量,“number_of_replicas”定义了副本数量。在这里,我们将主分片数设置为1,将副本数设置为0,这意味着我们的索引只有一个主分片,没有副本。

在“mappings”字段中,我们定义了两个字段:“title”和“content”。这两个字段都被指定为“text”类型,这意味着它们可以被全文搜索。

如果创建成功,ElasticSearch会返回一个JSON格式的响应,包含了索引的设置和映射信息。

添加文档
一旦我们创建了索引,就可以向其中添加文档了。在ElasticSearch中,文档是JSON格式的数据,类似于关系型数据库中的行。我们可以通过HTTP PUT请求将文档添加到索引中。

下面是一个向名为“my_index”的索引添加一篇文档的示例代码:

  1. import requests
  2. url = "http://localhost:9200/my_index/_doc/1"
  3. headers = {
  4. "Content-Type": "application/json"
  5. }
  6. data = """
  7. {
  8. "title": "ElasticSearch全文搜索API实践",
  9. "content": "本文介绍了ElasticSearch的全文搜索API,并提供代码示例帮助读者更好地理解和使用该功能。"
  10. }
  11. """
  12. response = requests.put(url, headers=headers, data=data)
  13. print(response.json())

上述代码通过HTTP PUT请求向名为“my_index”的索引中添加了一篇文档。文档的ID为“1”,文档内容包含了“title”和“content”两个字段。如果添加成功,ElasticSearch会返回一个JSON格式的响应,包含了文档的ID、版本等信息。

查询文档
在向ElasticSearch中添加了文档之后,我们可以使用全文搜索API查询这些文档。ElasticSearch的全文搜索API支持各种查询类型,如匹配查询、短语查询、前缀查询、通配符查询等。

下面是一个查询包含关键字“全文搜索”的文档的示例代码

  1. import requests
  2. url = "http://localhost:9200/my_index/_search"
  3. headers = {
  4. "Content-Type": "application/json"
  5. }
  6. data = """
  7. {
  8. "query": {
  9. "match": {
  10. "content": "全文搜索"
  11. }
  12. }
  13. }
  14. """
  15. response = requests.get(url, headers=headers, data=data)
  16. print(response.json())

上述代码通过HTTP GET请求向ElasticSearch实例的“/my_index/_search”路径发送一个JSON格式的数据,该数据定义了查询的内容。在这里,我们使用“match”查询类型查询包含关键字“全文搜索”的文档。

如果查询成功,ElasticSearch会返回一个JSON格式的响应,包含了查询结果的相关信息,如文档ID、得分等。


该分类下的相关小册推荐: