本文将介绍ElasticSearch的全文搜索API,并提供代码示例帮助读者更好地理解和使用该功能。
环境准备
在开始使用ElasticSearch的全文搜索API之前,我们需要准备一个ElasticSearch实例。这里我们以Docker容器方式搭建一个ElasticSearch实例:
docker run --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:7.12.1
上述命令会在本地启动一个ElasticSearch实例,并将9200端口映射到本地,方便我们通过API进行访问。
创建索引
在使用ElasticSearch的全文搜索API之前,我们需要先创建一个索引。索引是ElasticSearch中用于存储和检索文档的容器,类似于关系型数据库中的表。
下面是一个创建名为“my_index”的索引的示例代码:
import requests
url = "http://localhost:9200/my_index"
headers = {
"Content-Type": "application/json"
}
data = """
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"title": {
"type": "text"
},
"content": {
"type": "text"
}
}
}
}
"""
response = requests.put(url, headers=headers, data=data)
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”的索引添加一篇文档的示例代码:
import requests
url = "http://localhost:9200/my_index/_doc/1"
headers = {
"Content-Type": "application/json"
}
data = """
{
"title": "ElasticSearch全文搜索API实践",
"content": "本文介绍了ElasticSearch的全文搜索API,并提供代码示例帮助读者更好地理解和使用该功能。"
}
"""
response = requests.put(url, headers=headers, data=data)
print(response.json())
上述代码通过HTTP PUT请求向名为“my_index”的索引中添加了一篇文档。文档的ID为“1”,文档内容包含了“title”和“content”两个字段。如果添加成功,ElasticSearch会返回一个JSON格式的响应,包含了文档的ID、版本等信息。
查询文档
在向ElasticSearch中添加了文档之后,我们可以使用全文搜索API查询这些文档。ElasticSearch的全文搜索API支持各种查询类型,如匹配查询、短语查询、前缀查询、通配符查询等。
下面是一个查询包含关键字“全文搜索”的文档的示例代码
import requests
url = "http://localhost:9200/my_index/_search"
headers = {
"Content-Type": "application/json"
}
data = """
{
"query": {
"match": {
"content": "全文搜索"
}
}
}
"""
response = requests.get(url, headers=headers, data=data)
print(response.json())
上述代码通过HTTP GET请求向ElasticSearch实例的“/my_index/_search”路径发送一个JSON格式的数据,该数据定义了查询的内容。在这里,我们使用“match”查询类型查询包含关键字“全文搜索”的文档。
如果查询成功,ElasticSearch会返回一个JSON格式的响应,包含了查询结果的相关信息,如文档ID、得分等。