📅  最后修改于: 2023-12-03 15:00:35.181000             🧑  作者: Mango
Elasticsearch是一个开源的分布式搜索和分析引擎,它能快速地处理海量数据,支持实时搜索和分析数据,是当前最热门的数据搜索引擎之一。Elasticsearch的搜索API是其核心功能之一,提供了丰富的搜索操作和可定制的参数,方便我们对搜索的结果进行处理和优化。
安装Elasticsearch的方式有很多,我们可以选择使用官方提供的安装包,也可以使用brew安装或手动编译源代码。安装完成后,我们需要配置一些参数以确保Elasticsearch正确地运行。
在本地测试环境中,我们可以只使用单个节点运行Elasticsearch,无需进行复杂的集群配置。为了确保节点能够工作正常,我们需要修改一些默认的参数,在elasticsearch.yml
中进行配置。以下是常见的一些参数:
cluster.name: my_cluster # 集群名称
node.name: my_node # 节点名称
network.host: 0.0.0.0 # 监听所有网络地址
http.port: 9200 # HTTP监听端口
修改完参数后,我们可以启动Elasticsearch来测试是否配置正确:
bin/elasticsearch
如果看到以下信息,则表示Elasticsearch已经正确启动:
[2021-12-01T14:23:20,755][INFO ][o.e.n.Node ] [my_node] initialized
[2021-12-01T14:23:20,757][INFO ][o.e.n.Node ] [my_node] starting ...
[2021-12-01T14:23:22,052][INFO ][o.e.t.TransportService ] [my_node] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[2021-12-01T14:23:22,013][INFO ][o.e.h.HttpServer ] [my_node] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[2021-12-01T14:23:22,067][INFO ][o.e.n.Node ] [my_node] started
Elasticsearch的搜索API是通过HTTP请求来操作的,我们可以向Elasticsearch服务器发送HTTP请求,搜索数据、聚合数据等。以下是一个简单的搜索请求示例:
curl -XGET 'http://localhost:9200/my_index/_search?q=title:book'
上述请求表示在my_index
索引中搜索标题为"book"的文档。我们可以看到请求中有几个参数:
XGET
: HTTP请求方法,这里使用GET方法。/my_index/_search
: Elasticsearch的搜索路由路径,my_index
是索引名称,_search
表示执行搜索操作。q=title:book
: 查询参数,表示搜索标题为"book"的文档。当我们发送这个请求时,Elasticsearch会返回一个JSON格式的响应,包含搜索结果和其他相关信息。以下是一个示例响应:
{
"took": 13, // 搜索耗时
"timed_out": false, // 是否超时
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821, // 最大得分
"hits": [
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821, // 当前文档得分
"_source": {
"title": "book",
"author": "John Doe",
"content": "This is a book about Elasticsearch."
}
}
]
}
}
这个响应包含了搜索结果中的一个文档,其中_score
属性表示当前文档的得分,得分越高,表示当前文档与搜索条件越匹配。
Elasticsearch的搜索API提供了丰富的搜索操作和可定制的参数,以下是一些常用的进阶操作:
Elasticsearch支持基于查询DSL的灵活查询,DSL查询可以用JSON格式表示,支持范围查询、通配符查询、近似查询、全文查询等。以下是一个示例查询:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "book" } },
{ "range": { "page_count": { "gte": 100 } } }
],
"should": [
{ "match": { "author": "John" } }
],
"minimum_should_match": 1
}
}
}
这个查询表示必须包含"book"关键词,并且页数大于等于100,也可能包含作者为"John"的书。
我们可以使用from
和size
参数来进行分页操作,也可以使用sort
参数进行排序。
curl -XGET 'http://localhost:9200/my_index/_search?from=0&size=10&sort=page_count:desc'
这个请求表示从索引my_index
中检索10个文档,从第1个文档开始,并按页数降序排序。
Elasticsearch支持丰富的聚合操作,可以根据不同的聚合条件进行分组、计数、统计、平均值等。
{
"aggs": {
"author_count": {
"cardinality": {
"field": "author.keyword"
}
}
}
}
这个聚合操作表示统计my_index
中的作者数量,可以用于推荐系统和数据统计分析等场景。
Elasticsearch的搜索API提供了基础和丰富的搜索操作和可定制的参数,可以用于各种领域的搜索和聚合场景。在使用Elasticsearch的搜索API时,我们需要根据实际情况进行调整和优化,以获取更好的搜索效果。