AWS - ElasticSearch服务入门

Amazon Elasticsearch Service (Amazon ES) 是一种托管服务,可以让您轻松在AWS云中部署、操作和扩展 Elasticsearch 集群。Elasticsearch 是一款流行的开源搜索和分析引擎,适用于日志分析、实时应用程序监控、点击流分析等使用案例。借助 Amazon ES,您可以直接访问 Elasticsearch API,让现有代码和应用程序与服务无缝协作。Amazon ES 为您的 Elasticsearch 集群预置所有资源并启动集群。它还自动检测和替换失败的 Elasticsearch 节点,减少与自管理基础设施相关的开销。您只需调用一次 API 或在控制台中单击几下就可扩展集群。

一.Amazon ES域入门

1.创建Amazon ES域

详细配置请参见文档创建和配置ElasticSearch

1.1 使用Console创建Amazon ES域
  • 进入ElasticSearch服务并选择Create Elasticsearch domain
  • Step1: Choose deployment type 选择后点击Next
    • Deployment type: Development and testing [根据情况选择即可]
    • Version: 6.7 [选最新的即可]
  • Step 2: Configure cluster 选择后点击Next
    • Elasticsearch domain name:test-domain [编写自定义ElasticSearch域名即可]
    • Instance type实例类型: 选择t2.small.elasticsearch用于测试即可
    • Number of instances实例数:选择1 [根据情况选择]
    • Dedicated master instances 用于提高域的稳定性,不必选择
    • Storage存储[为数据节点选择存储类型。如果选择EBS存储类型,请将每个节点的EBS存储大小乘以群集中的数据节点数,以计算群集可用的总存储量。存储设置不适用于群集中的任何专用主节点]
      • EBS volume type (EBS 卷类型):General Purpose (SSD) (通用型 (SSD))
      • EBS volume size (EBS 卷大小):为每个数据节点键入外部存储的大小 (GiB),选择默认10
    • Enable encryption at rest可以不选择加密
    • Automated snapshot start hour (自动快照开始时间) 选择默认即可
  • Step 3: Set up access设置访问权限
    • 为简单起见,建议使用基于 IP 的访问策略。在 Set up access (设置访问权限) 页面上的 Network configuration (网络配置) 部分中,选择 Public access (公有访问权限)。
    • 目前可以忽略 Kibana authentication (Kibana 身份验证)
    • Set the domain access policy to (将域访问策略设置为),选择 Allow access to the domain from specific IP(s) (允许从特定 IP 访问域),然后输入公有 IP 地址
  • Step 4: Review 检查一下所有的配置,没问题点击Confirm
  • 注意:初始化新域大约需要十分钟时间。初始化您的域后,您可以上传数据和更改域。
1.2 使用AWS CLI创建Amazon ES域
aws es create-elasticsearch-domain --domain-name movies --elasticsearch-version 6.0 --elasticsearch-cluster-config InstanceType=t2.small.elasticsearch,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=10 --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":["es:*"],"Condition":{"IpAddress":{"aws:SourceIp":["your_ip_address"]}}}]}'
  • 上述命令使用 Elasticsearch 版本 6.0 创建一个名为 movies 的域。它指定一个 t2.small.elasticsearch 实例类型的实例。此实例类型需要 EBS 存储,因此它指定了一个 10GiB 的卷。最后,此命令应用基于 IP 的访问策略来将对域的访问限制为单个 IP 地址。
  • 并可以使用下述命令查询新域
aws es describe-elasticsearch-domain --domain movies
1.2 将数据上传到Amazon ES域以便编制索引
  • 可以通过命令行使用 Elasticsearch 索引和批量处理 API 将数据上传到 Amazon Elasticsearch Service 域以便编制索引
    • 使用索引 API 添加或更新单个 Elasticsearch 文档
    • 使用批量 API 添加或更新同一 JSON 文件中所述的多个 Elasticsearch 文档
  • 编制索引流程
    • 上传单个文档到 Amazon ES 域【运行以下命令将单个文档添加到 movies 域】
      curl -XPUT es_endpoint/domain_name/_doc/1 -d '{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}' -H 'Content-Type: application/json'
    • 上传包含多个文档的 JSON 文件到 Amazon ES 域
      • 创建名为 bulk_movies.json 的文件。将以下内容复制并粘贴到其中,并添加一个尾部换行
        { "index" : { "_index": "domain_name", "_type" : "_doc", "_id" : "2" } } {"director": "Frankenheimer, John", "genre": ["Drama", "Mystery", "Thriller"], "year": 1962, "actor": ["Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom"], "title": "The Manchurian Candidate"} { "index" : { "_index": "domain_name", "_type" : "_doc", "_id" : "3" } } {"director": "Baird, Stuart", "genre": ["Action", "Crime", "Thriller"], "year": 1998, "actor": ["Downey Jr., Robert", "Jones, Tommy Lee", "Snipes, Wesley", "Pantoliano, Joe", "Jacob, Ir\u00e8ne", "Nelligan, Kate", "Roebuck, Daniel", "Malahide, Patrick", "Richardson, LaTanya", "Wood, Tom", "Kosik, Thomas", "Stellate, Nick", "Minkoff, Robert", "Brown, Spitfire", "Foster, Reese", "Spielbauer, Bruce", "Mukherji, Kevin", "Cray, Ed", "Fordham, David", "Jett, Charlie"], "title": "U.S. Marshals"} { "index" : { "_index": "domain_name", "_type" : "_doc", "_id" : "4" } } {"director": "Ray, Nicholas", "genre": ["Drama", "Romance"], "year": 1955, "actor": ["Hopper, Dennis", "Wood, Natalie", "Dean, James", "Mineo, Sal", "Backus, Jim", "Platt, Edward", "Ray, Nicholas", "Hopper, William", "Allen, Corey", "Birch, Paul", "Hudson, Rochelle", "Doran, Ann", "Hicks, Chuck", "Leigh, Nelson", "Williams, Robert", "Wessel, Dick", "Bryar, Paul", "Sessions, Almira", "McMahon, David", "Peters Jr., House"], "title": "Rebel Without a Cause"}
      • 运行以下命令以将该文件上传到 movies 域
        curl -XPOST es_endpoint/_bulk --data-binary @bulk_movies.json -H 'Content-Type: application/json'
1.3 在 Amazon ES 域中搜索文档

要在 Amazon Elasticsearch Service 域中搜索文档,请使用 Elasticsearch 搜索 API。也可以使用 Kibana 在域中搜索文档。

  • 从命令行搜索文档
    • 运行以下命令在 movies 域中搜索单词 mars:
      curl -XGET 'elasticsearch_domain_endpoint/movies/_search?q=mars'
    • 返回的内容如下
      {"took":8,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.2876821,"hits":[{"_index":"dhrm-expensereport","_type":"_doc","_id":"1","_score":0.2876821,"_source":{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}}]}}%
    • 从结果可以看出返回的是包含mars的document
1.4 删除 Amazon ES 域
  • 在console中选择Delete domain (删除域)选项
  • 或使用Cli删除aws es delete-elasticsearch-domain --domain-name movies

二.Amazon Elasticsearch Service 访问控制

Amazon Elasticsearch Service 提供了多种方式来控制对您的域的访问。本部分介绍了各种策略类型,其彼此交互的方式,以及如何创建您自己的自定义策略。

1.基于资源的策略

  • 将基于资源的策略附加到域。这些策略指定委托人可以对域的子资源执行哪些操作。子资源包括 Elasticsearch 索引和 API。
  • Principal 元素指定账户、用户或允许访问的角色。Resource 元素指定这些委托人可以访问哪些子资源。以下基于资源的策略将授予 test-user 对 es:* 资源的完全访问权限 (test-domain)。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:*"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    }
  ]
}

要进一步限制 test-user,您可以应用以下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/test-index/_search"
    }
  ]
}

现在,test-user 只能执行一个操作:搜索 test-index。域中的所有其他索引均不可访问,且如果没有使用 es:ESHttpPut 操作或 es:ESHttpPost 操作的权限,test-user 将无法添加或修改文档。
接下来,您可以决定为高级用户配置角色。此策略允许 power-user-role 访问所有 HTTP 方法,但不能删除关键索引及其文档:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/power-user-role"
        ]
      },
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/power-user-role"
        ]
      },
      "Action": [
        "es:ESHttpDelete"
      ],
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/critical-index*"
    }
  ]
}

2. 基于身份的策略

  • 与基于资源的策略(附加到 Amazon ES 中的域)不同,您使用 AWS Identity and Access Management (IAM) 服务将基于身份的策略附加到用户或角色。与基于资源的策略一样,基于身份的策略指定谁可以访问服务,他们可以执行哪些操作,以及他们可以对哪些资源执行这些操作(如果适用)。
  • 虽然不一定,但基于身份的策略往往更通用。它们通常仅控制用户可执行的配置 API 操作。您准备好这些策略后,可以在 Amazon ES 中使用基于资源的策略为用户提供对 Elasticsearch 索引和 API 的访问权限。
  • 由于基于身份的策略附加到用户或角色 (委托人),JSON 不会指定委托人。以下策略授予对以 Describe 和 List 开头的操作的访问权限,且允许对所有域发送 GET 请求。这一操作组合提供只读访问:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "es:Describe*",
        "es:List*",
        "es:ESHttpGet"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
  • 管理员可能具有对 Amazon ES 的完全访问权限:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "es:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
  • 注意:具有 AWS 托管的 AmazonESReadOnlyAccess 策略的用户无法查看控制台中的群集运行状况。要允许它们查看群集运行状况,请向访问策略添加 “es:ESHttpGet” 操作并将该操作附加到其账户或角色。

3. 基于IP的策略

  • 基于 IP 的策略将对域的访问限制在一个或多个 IP 地址或 CIDR 块。从技术上讲,基于 IP 的策略不是一种不同类型的策略。相反,它们仅仅是指定匿名委托人的基于资源的策略,且包含一个特殊的 Condition 元素。
  • 注意:如果您为您的域启用了 VPC 访问,则无法配置基于 IP 的策略。但您可以使用安全组来控制哪些 IP 地址可以访问该域。有关更多信息,请参阅关于 VPC 域的访问策略。
    以下策略向源自指定 IP 范围的所有请求授予对 test-domain 的访问权限:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "es:*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.0.2.0/24"
          ]
        }
      },
      "Resource": "arn:aws:es:us-west-1:987654321098:domain/test-domain/*"
    }
  ]
}

4. 参考文献

三.Amazon Elasticsearch Service 中为数据建立索引

由于 Elasticsearch 使用的是 REST API,因此可通过多种方法为文档编制索引。您可以使用标准客户端 (如 curl) 或可发送 HTTP 请求的任何编程语言。为了进一步简化与之交互的过程,Elasticsearch 拥有了适用于多种编程语言的客户端。

1.建立索引的简介

  • 您必须先为数据编制索引,然后才能搜索数据。建立索引是搜索引擎整理数据以实现快速检索的方法。生成的结构被称为“索引”。
  • 在 Elasticsearch 中,数据的基本单位是 JSON 文档。在索引中,Elasticsearch 将文档整理为类型(您定义的任意数据类型)并使用唯一 ID 标识它们。
  • 对 _index API 的请求如下所示:[请注意_index/_type/_id的顺序,添加的body即是_source]
PUT elasticsearch_domain/index/type/id 
{ "A JSON": "document" }
  • 通过_bulk的方式发送请求方式如下**[请注意发送请求为/_bulk,请求中第一个json是index信息,第二个json是_source内容]**
POST elasticsearch_domain/_bulk
{ "index": { "_index" : "index", "_type" : "type", "_id" : "id" } }
{ "A JSON": "document" }
  • 注意:批量数据必须符合特定格式,即每行末尾处 (包括最后一行) 有一个换行符 (\n)。这是基本格式:
action_and_metadata\n
optional_document\n
action_and_metadata\n
optional_document\n
...
  • 在您将文档添加到不存在的索引时,Elasticsearch 会采用自动索引创建。如果未在请求中指定 ID,它还会自动生成 ID。此简单示例会自动创建 movies 索引、建立 movie 文档类型、为文档建立索引并向文档分配唯一 ID:[注意:如果使用自动ID生成,必须使用POST方法而不是PUT]
POST elasticsearch_domain/movies/movie
{"title": "Spirited Away"}
  • 要验证文档是否存在,您可以执行以下搜索:会返回所有index下的数据
GET elasticsearch_domain/movies/_search?pretty
  • 在 Elasticsearch 版本 6.0 及更高版本中创建的索引只能包含一种文档类型。为了获得与未来版本的 Elasticsearch 的最佳兼容性,请对所有索引使用单个类型 _doc:
PUT elasticsearch_domain/more-movies/_doc/1
{"title": "Back to the Future"}
  • 索引默认为 5 个主分片和 1 个副本。如果您要指定非默认设置,请在添加文档之前创建索引:
PUT elasticsearch_domain/more-movies
{"settings": {"number_of_shards": 6, "number_of_replicas": 2}}

2.索引的命名限制

  • Elasticsearch 索引具有以下命名限制:
    • 所有字母必须为小写形式。
    • 索引名称不能以 _ 或 - 开头。
    • 索引名称不能包含空格、逗号、"、*、+、/、\、|、?、#、> 或 <。

3.减小响应大小

  • 来自 _index 和 _bulk API 的响应包含相当多的信息。此信息可用于对请求进行问题排查或实施重试逻辑,但可使用大量带宽。
  • 在本示例中,对 32 字节文档编制索引会生成 339 字节响应(包括标头):
PUT elasticsearch_domain/more-movies/_doc/1
{"title": "Back to the Future"}
  • 响应
{
  "_index": "more-movies",
  "_type": "_doc",
  "_id": "1",
  "_version": 4,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 3,
  "_primary_term": 1
}
  • 此响应大小可能看起来很小,但如果您每天对 1000000 个文档(每秒对大约 11.5 个文档)编制索引,则每个响应 339 字节总计为每月 10.17GB 的下载流量。
  • 如果数据传输成本很重要,请使用 filter_path 参数来减小 Elasticsearch 响应的大小,但请小心,不要筛掉标识或重试失败请求所需的字段。这些字段会因客户端而异。filter_path 参数适用于所有 Elasticsearch REST API,但尤其适用于您经常调用的 API,例如 _index 和 _bulk API:
PUT elasticsearch_domain/more-movies/_doc/1?filter_path=result,_shards.total
{"title": "Back to the Future"}
  • 响应
{
  "result": "updated",
  "_shards": {
    "total": 2
  }
}
  • 不同于包括字段,您可以使用 - 前缀排除字段。filter_path 还支持通配符:
POST elasticsearch_domain/_bulk?filter_path=-took,-items.index._*
{ "index": { "_index": "more-movies", "_type": "_doc", "_id": "1" } }
{"title": "Back to the Future"}
{ "index": { "_index": "more-movies", "_type": "_doc", "_id": "2" } }
{"title": "Spirited Away"}
  • 响应
{
  "errors": false,
  "items": [
    {
      "index": {
        "result": "updated",
        "status": 200
      }
    },
    {
      "index": {
        "result": "updated",
        "status": 200
      }
    }
  ]
}

四.Amazon Elasticsearch Service 中搜索数据

1.URI 搜索

  • 统一资源标识符 (URI) 搜索是最简单的搜索形式。在 URI 搜索中,可以指定查询作为 HTTP 请求参数:
GET https://search-my-domain.us-west-1.es.amazonaws.com/_search?q=house
  • 示例响应可能与以下内容下类似:
{ "took": 25, "timed_out": false, "_shards": { "total": 10, "successful": 10, "skipped": 0, "failed": 0 }, "hits": { "total": 85, "max_score": 6.6137657, "hits": [ { "_index": "movies", "_type": "movie", "_id": "tt0077975", "_score": 6.6137657, "_source": { "directors": [ "John Landis" ], "release_date": "1978-07-27T00:00:00Z", "rating": 7.5, "genres": [ "Comedy", "Romance" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg", "plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.", "title": "Animal House", "rank": 527, "running_time_secs": 6540, "actors": [ "John Belushi", "Karen Allen", "Tom Hulce" ], "year": 1978, "id": "tt0077975" } }, ... ] } }
  • 默认情况下,此查询在所有索引的所有字段中搜索 house 一词。要缩小搜索范围,请在 URI 中指定索引 (movies) 和文档字段 (title):
GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house
  • 您可以在请求中包含其他参数,但支持的参数仅提供一小部分 Elasticsearch 搜索选项。以下请求将返回 20 个(而不是默认的 10 个)结果并按年(而不是按 _score)对这些结果进行排序:
GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc

2.请求正文搜索

  • 要执行更复杂的搜索,请对查询使用 HTTP 请求正文和特定于 Elasticsearch 域的语言 (DSL)。利用查询 DSL,您可以指定所有的 Elasticsearch 搜索选项。
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "size": 20,
  "sort": {
    "year": {
      "order": "desc"
    }
  },
  "query": {
    "query_string": {
      "default_field": "title",
      "query": "house"
    }
  }
}
  • 注意对于请求正文搜索,_search API 接受 HTTP GET 和 POST,但并非所有 HTTP 客户端都支持将请求正文添加到 GET 请求。POST 是更普遍的选择。在许多情况下,您可能想搜索多个字段,而不是全部字段。使用 multi_match 查询:
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "size": 20,
  "query": {
    "multi_match": {
      "query": "house",
      "fields": ["title", "plot", "actors", "directors"]
    }
  }
}
  • 提升字段
    可以通过“提升”某些字段来增强搜索相关性。提升是一种倍增器,它使一个字段中的匹配项的权重高于其他字段中的匹配项的权重。在以下示例中,john 在 title 字段中的匹配项对 _score 的影响是 plot 字段中匹配项的影响的两倍,并且是 actors 或 directors 字段中匹配项的影响的四倍。其结果是,John Wick 和 John Carter 等电影在搜索结果中接近榜首,而由 John Travolta 主演的电影则接近底部。
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "size": 20,
  "query": {
    "multi_match": {
      "query": "john",
      "fields": ["title^4", "plot^2", "actors", "directors"]
    }
  }
}
  • 对搜索结果进行分页
    如果您需要显示大量搜索结果,可使用 from 参数对结果进行分页。以下请求返回从零开始编制索引的搜索结果列表中的 20–39 个结果:
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "from": 20,
  "size": 20,
  "query": {
    "multi_match": {
      "query": "house",
      "fields": ["title^4", "plot^2", "actors", "directors"]
    }
  }
}
  • 搜索结果突出显示
    如果查询与一个或多个字段匹配,则 highlight 选项将指示 Elasticsearch 返回 hits 数组内的其他对象:
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "size": 20,
  "query": {
    "multi_match": {
      "query": "house",
      "fields": ["title^4", "plot^2", "actors", "directors"]
    }
  },
  "highlight": {
    "fields": {
      "plot": {}
    }
  }
}

如果查询与 plot 字段的内容匹配,则命中的内容可能与以下类似

{ "_index": "movies", "_type": "movie", "_id": "tt0091541", "_score": 11.276199, "_source": { "directors": [ "Richard Benjamin" ], "release_date": "1986-03-26T00:00:00Z", "rating": 6, "genres": [ "Comedy", "Music" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg", "plot": "A young couple struggles to repair a hopelessly dilapidated house.", "title": "The Money Pit", "rank": 4095, "running_time_secs": 5460, "actors": [ "Tom Hanks", "Shelley Long", "Alexander Godunov" ], "year": 1986, "id": "tt0091541" }, "highlight": { "plot": [ "A young couple struggles to repair a hopelessly dilapidated <em>house</em>." ] } }

默认情况下,Elasticsearch 将匹配的字符串包含在  标记中,提高与匹配项相关的最多 200 个字符的上下文,并通过标识标点符号、空格、制表符和换行符来将内容分成多个句子。所有这些设置均可自定义:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search
{
  "size": 20,
  "query": {
    "multi_match": {
      "query": "house",
      "fields": ["title^4", "plot^2", "actors", "directors"]
    }
  },
  "highlight": {
    "fields": {
      "plot": {}
    },
    "pre_tags": "<strong>",
    "post_tags": "</strong>",
    "fragment_size": 200,
    "boundary_chars": ".,!? "
  }
}
  • 计数 API
    如果您对文档内容不感兴趣,只是想知道匹配项的数量,则可使用 _count API 而非 _search API。以下请求使用 query_string 查询来标识浪漫喜剧:
POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_count
{
  "query": {
    "query_string": {
      "default_field": "genres",
      "query": "romance AND comedy"
    }
  }
}

示例响应可能与以下内容下类似:

{ "count": 564, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 } }
发布了258 篇原创文章 · 获赞 332 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_34829447/article/details/92631989
AWS