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 |