作者:来自 Elastic Mark Hoy
在 Elastic Stack 版本 9 中 Enterprise Search 已被弃用,但你仍然可以使用现有的 App Search 数据 —— 我们会向你展示如何操作。
想获得 Elastic 认证吗?来了解下一期 Elasticsearch Engineer 培训的时间!
Elasticsearch 拥有大量新功能,可以帮助你为你的使用场景构建最佳搜索解决方案。深入了解我们的示例 notebooks,开始免费 cloud 试用,或者立即在本地设备上体验 Elastic。
App Search 在 Elastic Stack 9.0 中已被停用。等等 —— 什么?如果你想升级到 Elasticsearch 9,那么你在使用 App Search 时所拥有的所有数据和功能该怎么办?别担心,你仍然可以继续使用这些内容,在这篇博客中我们会向你展示方法。
如果你一直是 Elastic 的 Enterprise Search 用户,从 Enterprise Search 版本 8.16.0 开始,你应该已经在 App Search 和 Workplace Search 的 UI 中看到了弃用提示。这些提示会提醒你,Enterprise Search 不会再发布任何 8.x 之后的新主版本。不过,如果你决定将 Elastic Stack 升级到 9.0 及更高版本,你仍然可以访问并使用之前 Enterprise Search 安装中的数据。
虽然 Enterprise Search 无法直接与 Elasticsearch 9.0 及更高版本配合使用,但你之前在 Enterprise Search 实例中拥有的任何数据今后仍然可以使用。关于此的更多信息,请查看这篇博客:From App Search to Elasticsearch — Tap into the future of search。
引擎和文档
在开始之前先说明一下:所有底层的 Enterprise Search 系统索引都会以前缀 .ent-search-actastic-* 开头,并且大多数索引都有一个版本号。
第一步,我们会获取你 Enterprise Search 实例中的所有引擎列表。为此,请在 .ent-search-actastic-engines_v26 索引上执行一次搜索。
`
1. GET /.ent-search-actastic-engines_v26/_search
2. {
3. "_source": ["id", "slug", "name"]
4. }
`AI写代码
不用太担心你在索引名称中看到的 _v* 后缀。这些只是表示 Enterprise Search 多年来的不同版本,其中引擎索引的第 26 版是最新的。
在获取搜索结果后,你会看到实例中的引擎记录。我们需要返回并关注的字段是引擎 ID、“slug”(我们在 URL 中使用的规范名称)以及实际的引擎名称。以下是本例中的两个引擎文档示例:
`1. {
2. "_source": {
3. "id": "6876ebc1ceda97bfd732e6fc",
4. "slug": "national-parks-demo",
5. "name": "national-parks-demo"
6. }`AI写代码
还有:
`1. "_source": {
2. "id": "67dc22aced534b3bd21535db",
3. "slug": "crawled-docs",
4. "name": "crawled-docs"
5. }
6. }`AI写代码
如果你的 App Search 实例使用了任何 meta 引擎,你还可以通过上述查询获取 source_engine_ids,从而查看该 meta 引擎包含的引擎。
`
1. GET /.ent-search-actastic-engines_v26/_search
2. {
3. "_source": ["id", "slug", "name", "source_engine_ids"]
4. }
`AI写代码
在这个例子中,我们有一个名为 “test-meta-engine” 的 meta 引擎,可以看到它的 source ID 是另外两个引擎。
`
1. "_source": {
2. "id": "67dd745eed534b989016439c",
3. "slug": "test-meta-engine",
4. "name": "test-meta-engine",
5. "source_engine_ids": [
6. "6876ebc1ceda97bfd732e6fc",
7. "67dc22aced534b3bd21535db"
8. ]
9. }
`AI写代码
检索你的文档
现在你已经有了引擎列表和它们各自的 ID,可以查询属于这些引擎的文档索引。引擎的文档存储在名为 enterprise-search-engine-{slug} 的索引中,其中 {slug} 是上面提到的项目。
例如:
`GET /enterprise-search-engine-crawled-docs/_search`AI写代码
这将返回 “crawled-docs” 索引中的文档。文档的实际内容和结构取决于你导入的源数据。
同义词
要查看你的同义词集,可以查询 .ent-search-actastic-synonyms 索引。注意,这会返回所有引擎的所有同义词集。如果你只想显示某个特定引擎的同义词,可以使用 match 查询进行过滤。例如,对于上面的 “national-parks-demo” 引擎,我们可以在 match 查询中使用引擎 ID:
`
1. GET /.ent-search-actastic-synonyms/_search
2. {
3. "query": {
4. "match": {
5. "engine_id": "6876ebc1ceda97bfd732e6fc"
6. }
7. },
8. "_source": ["engine_id", "synonyms"]
9. }
`AI写代码
返回结果将是一组包含同义词信息的文档。每个集合都会包含该同义词集的引擎 ID 以及集合中的词项。例如:
`1. "_source": {
2. "engine_id": "6876ebc1ceda97bfd732e6fc",
3. "synonyms": [
4. "mountains",
5. "cliffs"
6. ]
7. }`AI写代码
利用这些信息,你可以使用 Elasticsearch synonyms API 创建适用于任何索引的同义词集。
Curations
要获取某个引擎的策划列表,可以通过以下方式查询:
`
1. GET /.ent-search-actastic-app_search_document_position_queries_v4/_search
2. {
3. "query": {
4. "match": {
5. "engine_oid": "6876ebc1ceda97bfd732e6fc"
6. }
7. },
8. "_source": ["engine_oid", "query", "order", "document_position_id"]
9. }
`AI写代码
这将返回为 curation 设置的查询及其顺序。例如:
`
1. "_source": {
2. "document_position_id": "6876ebc1ceda97bfd732e73c",
3. "engine_oid": "6876ebc1ceda97bfd732e6fc",
4. "query": "hiking",
5. "order": 0
6. }
`AI写代码
另外,我们还会得到 document_position_id,这样就可以列出特定查询的置顶文档。要检索某个引擎所有查询的置顶文档及其位置列表,可以在 match 查询中提供引擎 ID,并查询:
`
1. GET /.ent-search-actastic-app_search_document_positions_v3/_search
2. {
3. "query": {
4. "match": {
5. "id": "6876ebc2ceda97bfd732e73e"
6. }
7. },
8. "_source": ["id", "modified", "deleted", "details"]
9. }
`AI写代码
这将返回格式如下的结果:
`
1. "_source": {
2. "id": "6876ebc2ceda97bfd732e73e",
3. "details": null,
4. "modified": {
5. "0": "park_rocky-mountain",
6. "1": "park_glacier"
7. },
8. "deleted": []
9. }
`AI写代码
请注意上面 “modified” 字段中的文档 ID,它们对应于该引擎文档索引中存储的文档 ID。
在 Elasticsearch 9 中,可以通过使用查询规则(query rules)来实现 App Search 的 curation 功能。查询规则允许你以类似策划的方式定制查询结果。
相关性设置
如果你对引擎进行了相关性调优,也可以通过查询引擎本身来获取这些信息。例如,在我们的示例引擎中,我们想显示 search_setting 字段,查看所应用的设置:
`
1. GET /.ent-search-actastic-engines_v26/_search
2. {
3. "query": {
4. "match": { "id": "6876ebc2ceda97bfd732e73e"}
5. },
6. "_source": ["search_setting"]
7. }
`AI写代码
在这个例子中,它返回了我们定义的搜索字段以及我们可能应用的任何提升(boost)。
`1. "_source": {
2. "search_setting": [
3. {
4. "search_fields": {
5. "description": {
6. "weight": 2.4
7. },
8. "title": {
9. "weight": 5
10. },
11. "states": {
12. "weight": 2.8
13. }
14. },
15. "boosts": {
16. "visitors": [
17. {
18. "function": "linear",
19. "type": "functional",
20. "factor": 1.5,
21. "operation": "add"
22. }
23. ]
24. }
25. }
26. ]
27. }`AI写代码
要使用你的 App Search 数据创建动态且相关的查询,请参阅 App Search Engine Exporter notebook 中标题为 “How to build App Search like queries” 的章节。
分析
所有 Enterprise Search 的分析日志都存储在数据流(datastreams)中。对于 App Search 日志,使用 logs-app_search.analytics-default 数据流索引来构建 App Search 中 “Analytics” 标签页的视图。
要查询数据流详情,可以使用:
`GET /_data_stream/logs-app_search.analytics-default`AI写代码
数据流的作用类似于普通索引,但它是追加-only 的。你可以像查询其他索引一样,使用 _search 操作符搜索数据流中的记录。例如:
`GET /logs-app_search.analytics-default/_search`AI写代码
App Search 用户界面怎么样?
你在 App Search 中使用的大部分面向用户的功能,现在仍然可以通过 Elastic Search UI 获得。既然你已经知道数据在哪里以及如何访问它,就可以使用 Elastic Search UI 为你的用户提供一流的 App Search 数据搜索体验。你可以在我们的 sandbox 中尝试配置 Elastic Search UI。
对于后端配置、查询调优和索引选项,你需要使用底层的 Elasticsearch API 调用和查询语言,以更好地为最终用户调优体验。大量相关信息可以在 App Search Engine Exporter notebook 中找到。
总结
希望有了这些信息,你能够在升级到 Elastic 9 stack 后继续使用任何 App Search 数据。你可以在 Elastic 文档中查看此表格,了解 Elasticsearch 对应的功能列表。更多信息可以参考下面链接的几个 notebook,了解更多迁移细节。
如果你是从 9.0 及之后的版本全新安装,请注意 Enterprise Search 不会包含在内,上述索引也不会被创建。如果你有现有的 Enterprise Search 安装,希望导出并将数据复制到新的 Elastic stack,可以参考 App Search Engine exporter notebook。这个 notebook 讲解了这里讨论的很多内容,并展示了如何将数据从 App Search 导出并迁移到 Elasticsearch。它还详细介绍了 App Search 索引中使用的底层结构和分析器,帮助你了解底层运作。
另外,如果你有爬虫数据和计划任务,可以参考 App Search Crawler to Open Crawler migration notebook。该 notebook 指导你如何导出 App Search 爬虫设置,并应用到 Elastic Open Crawler。
原文:Working with your App Search data in a post Enterprise Search world - Elasticsearch Labs