[ElasticSearch]搜索

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1. 空搜索测试数据:https://gist.github.com/clintongormley/85792811.

1. 空搜索

测试数据:

https://gist.github.com/clintongormley/8579281

1.1 搜索

最基本的搜索API是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档:

curl -XGET 'localhost:9200/_search?pretty'

Java版本:

SearchRequestBuilder searchRequestBuilder = client.prepareSearch();
SearchResponse response = searchRequestBuilder.get();

返回的结果如下:

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 10,
        "successful": 10,
        "failed": 0
    },
    "hits": {
        "total": 13,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "gb",
                "_type": "tweet",
                "_id": "5",
                "_score": 1.0,
                "_source": {
                    "date": "2014-09-15",
                    "name": "Mary Jones",
                    "tweet": "However did I manage before Elasticsearch?",
                    "user_id": 2
                }
            },
            {
                "_index": "gb",
                "_type": "tweet",
                "_id": "13",
                "_score": 1.0,
                "_source": {
                    "date": "2014-09-23",
                    "name": "Mary Jones",
                    "tweet": "So yes, I am an Elasticsearch fanboy",
                    "user_id": 2
                }
            }
            ...
        ]
    }
}

1.2 hits

返回结果中最重要的部分是hits,它包含total 字段来表示匹配到的文档总数,并且一个hits 数组包含所查询结果的前十个文档。

hits数组中每个结果包含文档的_index 、 _type 、 _id以及_source 字段。这意味着我们可以直接从返回的搜索结果中获取整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你自己单独去获取文档。

每个结果还有一个_score字段,这是一个相关性得分 ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关性最高的文档,就是说,返回文档是按照_score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果都是中性的 _score为1。

max_score是文档与查询相匹配的最高_score

1.3 Took

took告诉我们整个搜索请求执行多少毫秒数。

1.4 Shards

_shards告诉我们参与查询的分片总数(total),有多少是成功的(successful),有多少的是失败的(failed)。

通常我们不希望分片失败,但是还是有可能发生。如果我们遭受一些重大故障,导致同一分片主的主分片和副本分片都丢失,那么这个分片就不会响应搜索请求。这种情况下,Elasticsearch将报告这个分片failed,但仍将继续返回剩余分片上的结果。

1.5 Timeout

time_out值告诉我们查询是否超时。默认情况下,搜索请求不会超时。 如果低响应时间比完整结果更重要,您可以将超时指定为10或10ms(10毫秒)或1秒(1秒):

curl -XGET 'localhost:9200/_search?timeout=10ms'

在请求超时之前,ElasticSearch将返回从每个分片收集到的任何结果。

警告

应当注意的是 timeout 不是停止执行查询,它仅仅是告知协调节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询,即使结果已经发送了。

使用超时是因为对你的 SLA(服务等级协议)很重要的,而不是因为想去中止长时间运行的查询。

2. 多索引和多类型搜索

如果不对我们的搜索做出特定索引或者特定类型的限制,就会搜索集群中的所有文档。Elasticsearch将搜索请求 并行转发到每一个主分片或者副本分片,收集结果以选择整体中前10名,并且返回给我们。

但是,通常,您将希望在一个或多个特定索引中搜索,也可能需要搜索一个或多个特定类型。 我们可以通过在URL中指定索引和类型来执行此操作,如下所示:

/_search
    在所有的索引中搜索所有的类型
/gb/_search
    在gb索引中搜索所有的类型
/gb,us/_search
    在gb和us索引中搜索所有的类型
/g*,u*/_search
    在以g或者u开头的索引中搜索所有的类型
/gb/user/_search
    在gb索引中搜索user类型
/gb,us/user,tweet/_search
    在gb和us索引中搜索user和tweet类型
/_all/user,tweet/_search
    在所有的索引中搜索user和tweet类型

Java版本:

SearchRequestBuilder searchRequestBuilder = client.prepareSearch();
searchRequestBuilder.setIndices("*index");
SearchResponse response = searchRequestBuilder.get();

从下面源码中,我们可以知道,设置索引和类型的方法参数是可变参数,因此我们可以设置多个索引或者类型。

public SearchRequestBuilder setIndices(String... indices) {
    request.indices(indices);
    return this;
}
public SearchRequestBuilder setTypes(String... types) {
    request.types(types);
    return this;
}

当在单个索引中搜索时,Elasticsearch将搜索请求转发到该索引中每个分片的主分片或副本分片上,然后从每个分片收集结果。 在多个索引中搜索的方式完全相同 - 会涉及更多的分片。

提示

搜索一个具有五个主分片的索引完全等同于搜索每个具有一个主分片的五个索引。

原文:https://www.elastic.co/guide/en/elasticsearch/guide/current/empty-search.html

https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index-multi-type.html

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
存储 自然语言处理 BI
|
6月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
2月前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
205 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
1月前
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
|
1月前
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
|
2月前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
172 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
1月前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案。
214 5
|
2月前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
120 8
|
2月前
|
搜索推荐 API 定位技术
一文看懂Elasticsearch的技术架构:高效、精准的搜索神器
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。
178 0
|
3月前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
75 6

热门文章

最新文章