如何通过lambda在aws弹性搜索中搜索?

问题描述

我正在研究以下AWS文档-https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/search-example.html,以创建本质上是lambda函数搜索创建的弹性搜索域。我不太了解此处的搜索方式,下面的示例代码正在获取对url的请求-'https://'+ host +'/'+ index +'/ _search'。这里的“ / _search”是什么。索引也是URL的一部分。索引中的索引和搜索在弹性搜索中如何工作如果在ES域中有多个索引,并且我们想设置api网关和lambda,如何使其能够在多个索引中进行搜索

import boto3
import json
import requests
from requests_aws4auth import AWS4Auth

region = '' # For example,us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key,credentials.secret_key,region,service,session_token=credentials.token)

host = '' # For example,search-mydomain-id.us-west-1.es.amazonaws.com
index = 'movies'
url = 'https://' + host + '/' + index + '/_search'

# Lambda execution starts here
def handler(event,context):

    # Put the user query into the query DSL for more accurate search results.
    # Note that certain fields are boosted (^).
    query = {
        "size": 25,"query": {
            "multi_match": {
                "query": event['querystringparameters']['q'],"fields": ["fields.title^4","fields.plot^2","fields.actors","fields.directors"]
            }
        }
    }

    # ES 6.x requires an explicit Content-Type header
    headers = { "Content-Type": "application/json" }

    # Make the signed HTTP request
    r = requests.get(url,auth=awsauth,headers=headers,data=json.dumps(query))

    # Create the response and add some extra content to support CORS
    response = {
        "statusCode": 200,"headers": {
            "Access-Control-Allow-Origin": '*'
        },"isBase64Encoded": False
    }

    # Add the search results to the response
    response['body'] = r.text
    return response

解决方法

我认为您可以将Elasticsearch客户端用于Python:

https://elasticsearch-py.readthedocs.io/en/master/

像这样的更具“ Python风格”的查询Elasticsearch。