如何解决如何通过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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。