Elastic App Search的API客户端
项目描述
⚠️ 此客户端已弃用 ⚠️
自企业搜索版本7.10.0起,我们建议用户使用新的企业搜索Python客户端并弃用此客户端。
本客户端将与所有Enterprise Search 7.x版本兼容,但不与8.x版本兼容。我们对这个项目的开发工作将仅限于错误修复。所有未来的增强都将集中在Enterprise Search Python客户端上。
谢谢! - Elastic
用于构建与Elastic App Search一起的出色、相关搜索体验的第一方Python客户端。
内容
入门 🐣
要安装客户端,请使用pip
python -m pip install elastic-app-search
您还可以下载项目源代码并运行:
python setup.py install
依赖项
版本控制
此客户端与App Search一起版本化和发布。
为了保证兼容性,请在使用相应App Search实现的主版本中,使用此库的最新版本。
例如,对于App Search 7.3
,使用此库的7.3
或更高版本,但不使用8.0
。
如果您正在使用在swiftype.com上可用的App Search SaaS版本,则应使用客户端的7.5.x版本。
使用方法
实例化客户端
使用此客户端假定您已经有一个Elastic App Search实例正在运行。
可以使用base_endpoint
、api_key
和use_https
参数实例化客户端
>>> from elastic_app_search import Client
>>> client = Client(
base_endpoint='localhost:3002/api/as/v1',
api_key='private-mu75psc5egt9ppzuycnc2mc3',
use_https=False
)
注意
[api_key]
用于对API进行身份验证。您可以使用任何密钥类型与客户端一起使用,但每个密钥有不同的作用域。有关密钥的更多信息,请参阅文档。
base_endpoint
必须排除协议并包含api/as/v1
前缀。这通常可以在App Search仪表板中的凭据选项卡中找到。
根据您的服务器配置设置use_https
为True
或False
。通常在本地主机上开发时为False
,而在生产环境中为True
。
以下是一个Elastic Cloud配置示例
>>> from elastic_app_search import Client
>>> client = Client(
base_endpoint='77bf13bc2e9948729af339a446b06ddcc.app-search.us-east-1.aws.found.io/api/as/v1',
api_key='private-mu75psc5egt9ppzuycnc2mc3',
use_https=True
)
Swiftype.com App Search用户
当使用在swiftype.com上可用的App Search SaaS版本时,您可以使用host_identifier
而不是base_endpoint
参数配置客户端。可以在凭据菜单中找到host_identifier
。
>>> from elastic_app_search import Client
>>> host_identifier = 'host-c5s2mj'
>>> api_key = 'private-mu75psc5egt9ppzuycnc2mc3'
>>> client = Client(host_identifier, api_key)
索引:创建或更新单个文档
>>> engine_name = 'favorite-videos'
>>> document = {
'id': 'INscMGmhmX4',
'url': 'https://www.youtube.com/watch?v=INscMGmhmX4',
'title': 'The Original Grumpy Cat',
'body': 'A wonderful video of a magnificent cat.'
}
>>> client.index_document(engine_name, document)
{'id': 'INscMGmhmX4'}
索引:创建或更新多个文档
>>> engine_name = 'favorite-videos'
>>> documents = [
{
'id': 'INscMGmhmX4',
'url': 'https://www.youtube.com/watch?v=INscMGmhmX4',
'title': 'The Original Grumpy Cat',
'body': 'A wonderful video of a magnificent cat.'
},
{
'id': 'JNDFojsd02',
'url': 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
'title': 'Another Grumpy Cat',
'body': 'A great video of another cool cat.'
}
]
>>> client.index_documents(engine_name, documents)
[{'id': 'INscMGmhmX4', 'errors': []}, {'id': 'JNDFojsd02', 'errors': []}]
索引:更新文档(部分更新)
>>> engine_name = 'favorite-videos'
>>> documents = [
{
'id': 'INscMGmhmX4',
'title': 'Updated title'
}
]
>>> client.update_documents(engine_name, documents)
获取文档
>>> engine_name = 'favorite-videos'
>>> client.get_documents(engine_name, ['INscMGmhmX4'])
[{'id': 'INscMGmhmX4','url': 'https://www.youtube.com/watch?v=INscMGmhmX4','title': 'The Original Grumpy Cat','body': 'A wonderful video of a magnificent cat.'}]
列出文档
>>> engine_name = 'favorite-videos'
>>> client.list_documents(engine_name, current=1, size=20)
{
'meta': {
'page': {
'current': 1,
'total_pages': 1,
'total_results': 2,
'size': 20
}
},
'results': [{'id': 'INscMGmhmX4','url': 'https://www.youtube.com/watch?v=INscMGmhmX4','title': 'The Original Grumpy Cat','body': 'A wonderful video of a magnificent cat.'}]
}
销毁文档
>>> engine_name = 'favorite-videos'
>>> client.destroy_documents(engine_name, ['INscMGmhmX4'])
[{'id': 'INscMGmhmX4','result': True}]
获取模式
>>> engine_name = 'favorite-videos'
>>> client.get_schema(engine_name)
{'name':'text', 'square_km': 'number', 'square_mi': 'text'}
创建/更新模式
>>> engine_name = 'favorite-videos'
>>> client.update_schema(engine_name, {'square_km': 'text'})
{'square_km': 'text'}
>>> client.update_schema(engine_name, {'square_mi': 'text'})
{'square_km': 'text', 'square_mi': 'text'}
>>> client.update_schema(engine_name, {'square_km': 'number'})
{'square_km': 'number', 'square_mi': 'text'}
列出引擎
>>> client.list_engines(current=1, size=20)
{
'meta': {
'page': {
'current': 1,
'total_pages': 1,
'total_results': 2,
'size': 20
}
},
'results': [{'name': 'favorite-videos'}, {'name': 'another-engine'}]
}
获取引擎
>>> client.get_engine('favorite-videos')
{'name': 'favorite-videos'}
创建引擎
>>> client.create_engine('favorite-videos', 'en')
{'name': 'favorite-videos', 'type': 'default', 'language': 'en'}
销毁引擎
>>> client.destroy_engine('favorite-videos')
{'deleted': True}
列出引擎中的所有同义词集
使用默认分页(页面大小为20)
>>> client.list_synonym_sets('us-national-parks')
{
'meta': {
'page': {
'current': 1,
'total_pages': 1,
'total_results': 3,
'size': 20
}
},
'results': [
{
'id': 'syn-5b11ac66c9f9292013220ad3',
'synonyms': [
'park',
'trail'
]
},
{
'id': 'syn-5b11ac72c9f9296b35220ac9',
'synonyms': [
'protected',
'heritage'
]
},
{
'id': 'syn-5b11ac66c9f9292013220ad3',
'synonyms': [
'hectares',
'acres'
]
}
]
}
使用自定义分页
>>> client.list_synonym_sets('us-national-parks', size=1, current=1)
{
'meta': {
'page': {
'current': 1,
'total_pages': 3,
'total_results': 3,
'size': 1
}
},
'results': [
{
'id': 'syn-5b11ac66c9f9292013220ad3',
'synonyms': [
'park',
'trail'
]
}
]
}
获取单个同义词集
>>> client.get_synonym_set('us-national-parks', 'syn-5b11ac66c9f9292013220ad3')
{
'id': 'syn-5b11ac66c9f9292013220ad3',
'synonyms': [
'park',
'trail'
]
}
创建同义词集
>>> client.create_synonym_set('us-national-parks', ['park', 'trail'])
{
'id': 'syn-5b11ac72c9f9296b35220ac9',
'synonyms': [
'park',
'trail'
]
}
更新同义词集
>>> client.update_synonym_set('us-national-parks', 'syn-5b11ac72c9f9296b35220ac9', ['park', 'trail', 'ground'])
{
'id': 'syn-5b11ac72c9f9296b35220ac9',
'synonyms': [
'park',
'trail',
'ground'
]
}
销毁同义词集
>>> client.destroy_synonym_set('us-national-parks', 'syn-5b11ac66c9f9292013220ad3')
{
'deleted': True
}
搜索
>>> client.search('favorite-videos', 'grumpy cat', {})
{'meta': {'page': {'current': 1, 'total_pages': 1, 'total_results': 2, 'size': 10}, ...}, 'results': [...]}
多搜索
>>> client.multi_search('favorite-videos', [{
'query': 'cat',
'options': { 'search_fields': { 'title': {} }}
},{
'query': 'dog',
'options': { 'search_fields': { 'body': {} }}
}])
[{'meta': {...}, 'results': [...]}, {'meta': {...}, 'results': [...]}]
查询建议
>>> client.query_suggestion('favorite-videos', 'cat', {
'size': 10,
'types': {
'documents': {
'fields': ['title']
}
}
})
{'results': {'documents': [{'suggestion': 'cat'}]}, 'meta': {'request_id': '390be384ad5888353e1b32adcfaaf1c9'}}
点击跟踪
>>> client.click(engine_name, {'query': 'cat', 'document_id': 'INscMGmhmX4'})
创建签名搜索密钥
创建一个仅搜索正文字段的搜索密钥。
>>> api_key = 'search-xxxxxxxxxxxxxxxxxxxxxxxx'
>>> api_key_name = 'search-key' # This name must match the name of the key above from your App Search dashboard
>>> signed_search_key = Client.create_signed_search_key(api_key, api_key_name, {'search_fields': { 'body': {}}})
>>> client = Client(
base_endpoint='localhost:3002/api/as/v1',
api_key=signed_search_key,
use_https=False
)
创建元引擎
>>> client.create_meta_engine(
engine_name=engine_name,
source_engines=[
'source-engine-1',
'source-engine-2'
]
)
{'source_engines': ['source-engine-1', 'source-engine-2'], 'type': 'meta', 'name': 'my-meta-engine'}
将源引擎添加到元引擎中
>>> client.add_meta_engine_sources('my-meta-engine', ['source-engine-3'])
{'source_engines': ['source-engine-1', 'source-engine-2', 'source-engine-3'], 'type': 'meta', 'name': 'my-meta-engine'}
从元引擎中删除源引擎
>>> client.delete_meta_engine_sources('my-meta-engine', ['source-engine-3'])
{'source_engines': ['source-engine-1', 'source-engine-2'], 'type': 'meta', 'name': 'my-meta-engine'}
搜索API日志
>>> client.get_api_logs('my-meta-engine', {
"filters": {
"date": {
"from": "2020-03-30T00:00:00+00:00",
"to": "2020-03-31T00:00:00+00:00"
},
"status": "429"
}
})
{
'results': [],
'meta': {
'query': '',
'filters': {
'date': {
'from': '2020-03-27T00:00:00+00:00',
'to': '2020-03-31T00:00:00+00:00'
},
'status': '429'
},
'sort_direction': 'asc',
'page': {
'current': 1,
'total_pages': 0,
'total_results': 0,
'size': 10
}
}
}
获取搜索设置
>>> client.get_search_settings(engine_name='us-national-parks')
{
"search_fields": {
"name": {
"weight": 1
},
"description": {
"weight": 1
}
},
"result_fields": {
"name": {
"raw": {}
},
"description": {
"raw": {}
}
},
"boosts": {}
}
更新搜索设置
>>> client.update_search_settings(
engine_name='us-national-parks',
search_settings={
"search_fields": {
"name": {
"weight": 2
},
"description": {
"weight": 1
}
},
"result_fields": {
"name": {
"raw": {}
},
"description": {
"raw": {}
}
},
"boosts": {}
}
)
{
"search_fields": {
"name": {
"weight": 2
},
"description": {
"weight": 1
}
},
"result_fields": {
"name": {
"raw": {}
},
"description": {
"raw": {}
}
},
"boosts": {}
}
重置搜索设置
>>> client.reset_search_settings(engine_name='us-national-parks')
{
"search_fields": {
"name": {
"weight": 1
},
"description": {
"weight": 1
}
},
"boosts": {}
}
运行测试
python setup.py test
常见问题解答 🔮
我在哪里报告客户端的问题?
如果某事未按预期工作,请打开一个问题。
我在哪里可以了解更多关于App Search的信息?
您最好的选择是阅读文档。
我在哪里可以获得帮助呢?
您可以查看Elastic App Search社区讨论论坛。
贡献 🚀
我们欢迎对项目做出贡献。在开始之前,请注意以下几点:
- 在提交拉取请求之前,请创建一个问题来讨论您提案的范围。
- 请适当编写简洁的代码和文档。
许可证 📗
感谢所有贡献者!
项目详情
elastic-app-search-7.10.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e6813e54da27eedf30db3d86f772ec403b215875d4c1047f2e68cddc45525f54 |
|
MD5 | f8c4d67d04399f9be923d2b4058cd3e1 |
|
BLAKE2b-256 | d10493de16b6d3f6ca4ccd630c6fae3b30ef9034a8104b54f1a25c8be4de0dd7 |