什么是 Elasticsearch?
Scrapeless Web Unlocker 获取可公开访问的网页内容,使应用程序可以将其转换为 Elasticsearch 的文档。
Elasticsearch 是一个分布式搜索与分析引擎,它为文档建立索引,并针对文档字段回答查询。应用程序使用它来搜索文本、过滤结构化属性,以及汇总已索引的数据。它的设计在用户需要从一个集合中检索相关材料,而不仅仅是通过已知标识符定位某一行记录时尤其有用。
一个可搜索的网页集合不仅仅是下载的页面。它需要文档模型、稳定的标识,以及决定哪些内容值得进入索引的规则。Elasticsearch 让被接受的内容可被搜索;它并不保证采集器获得的是预期页面,也不保证页面中的陈述为真。
文档、字段与索引
一个 Elasticsearch 文档会将描述被索引条目的命名字段组合在一起。一个索引在特定设置和映射下收集文档,这些设置和映射会影响存储与搜索。同一源页面可以根据应用是索引整篇文章、单个产品,还是一篇长参考页中的某个部分,生成不同的搜索文档。
在设计索引之前先选择检索单元。一个搜索结果应当标识出用户可以理解并打开的内容。将文章拆分成多个部分可以提升针对特定问题的精确度,但每一部分都需要与父页面的关系以及足够的上下文,以使其含义清晰。
JSON 提供了用于文档交换的通用表示。 JSON 数据模型 定义了对象、数组与原始值,而应用程序的文档模式则赋予这些值以意义。名为 published_at 的字段需要一个约定俗成的解释;在语法上有效的 JSON 并不能告诉你该值到底描述的是发布日期还是采集时间。
稳定的文档标识同样重要。如果每次采集都创建毫无关联的标识符,重复观测可能会以重复搜索结果的形式出现。如果所有版本都覆盖同一个标识符而在其他地方又未保留历史,应用程序就可能失去解释“发生了什么变化”的能力。需要决定索引代表的是当前内容、历史观测,还是经过设计组合的结果。
为什么倒排索引有助于文本搜索
倒排索引会将术语与包含这些术语的文档关联起来。搜索引擎无需在每个页面的完整文本上为每个查询做扫描,而是可以利用已索引的术语信息来识别候选匹配。 Apache Lucene 的搜索与索引能力 构成 Elasticsearch 背后的部分技术基础。
文本分析会影响哪些术语进入索引。分析器可以将文本分解为标记,并对字段应用合适的转换。这意味着显示的文本与索引中的表示承担着不同的目的。在根据应用预期的语言和查询选择分析行为的同时,要保留源文本用于展示。
标识符通常需要不同于文章正文的处理方式。产品代码或主机名可能需要精确匹配,而段落文本则应支持语言导向的检索。将每个字符串一概当作普通文本处理,可能会让过滤行为变得难以预料,并扭曲用户对精确查找结果的理解。
相关性同样需要产品层面的判断。匹配到的文档未必是最有用的文档,高得分也不能证明其在事实层面具有权威性。要用具有代表性的用户问题评估预期的有用结果,并包含涉及短查询、含义模糊的术语,以及用相同词语描述不同主题的文档等情况。
映射赋予字段搜索意义
映射定义了字段如何被存储和建立索引。 Elasticsearch 映射模型 区分了自动字段推断与显式字段定义。自动推断有助于探索,而重要的生产字段则受益于经过精心设计的类型和可预测行为。
设想一个包含标题、来源标识符、观测时间和价格的公共产品集合。标题是承载语言内容的字段。来源标识符是精确身份字段。观测时间支持时间过滤,而只有在正确建模其货币和计量单位时,价格才支持数值比较。
避免让任意来源键变成不受控制的字段目录。页面可能暴露多种标签,而盲目地将每个标签提升为新的映射字段,会让索引结构膨胀到超出应用需要的程度。要对已知字段做规范化处理,并将真正多变的属性放在经过刻意选择的表示中。
映射变更应被视为模型变更。有些变更需要新建索引并重新索引,而不是在原位重新诠释现有数据。要保留对已接受源记录的访问,以便团队在字段设计或分析规则变化时重建搜索表示。
摄取成功与搜索可见性并不相同
Elasticsearch 通过刷新行为让索引中的变更对搜索可见。因此,一次写入成功与一次可以立刻看到更新文档的搜索,是两个不同的里程碑。围绕应用实际承诺的里程碑来定义“新鲜度”。
文档处理流水线可以分别记录采集完成、转换完成与搜索可见性。当用户询问为什么更新后的文章没有出现时,这些状态可以显示:是源内容尚未被采集、文档尚未被接受,还是搜索表示仍在等待变为可见。
不要假设在每一份文档之后强制刷新可见性就是最好的运行策略。应根据应用对新鲜度的要求以及测得的工作负载来选择摄取和可见性行为。周期性的研究数据收集与交互式发布界面有着不同的预期——在交互式发布界面中,作者会在更改页面后立即进行搜索。
删除也需要明确的路径。从已批准集合中消失的源,可能需要从索引中移除、标记为不可用,或保留为历史记录。仅添加和更新文档的收集器,即使其最新一次收集看起来是成功的,也可能让旧的结果无限期地保持可搜索状态。
将公共页面转换为搜索文档
一个网页到搜索的处理流程应当将检索与文档接受分离开来。 无痕网页解锁器 可以检索公共页面内容,而应用程序则识别该页面、提取相关文本并构建搜索文档。 Scrapeless Web Unlocker 功能 描述检索服务本身,而不是特定于 Elasticsearch 的连接器。
对于技术参考资料集合,从一组经过认可的规范页面标识开始。将源 URL 和观察上下文与已接受的内容一并存储。通过一个抽取规则从搜索文本中移除重复的导航内容,同时仍然保留文章的标题和有意义的章节关系。
在建立索引前检查内容是否相同。挑战页面、不相关的重定向目标或有效的 HTML 错误通知都不应替换已接受的参考文章。同样,除非应用程序已经确认源内容确实被删除,否则空的抽取结果不应悄然删除旧的搜索文本。
更广泛的讨论 用于检索管道的新鲜网页内容 解释了为什么检索的新鲜度取决于索引周围的采集过程。搜索存储本身无法使陈旧的源内容变得最新。在新鲜度承诺中包含采集间隔和源接受策略,并咨询 无抓取定价 在决定多长时间重新查阅来源时。
Elasticsearch 与记录系统
搜索索引通常在可以从已采纳的源记录中重建的表示形式下效果最佳。单独的记录系统可以保存经过验证的观测数据和业务关系,而 Elasticsearch 则用于提供从这些内容派生出的、以检索为导向的文档。
| 责任 | 典型所有者 | 设计问题 |
|---|---|---|
| 来源接受 | 集合应用程序 | 这是预期的内容吗? |
| 已接受的观测历史 | 持久性应用程序存储 | 源记录可以稍后再解释吗? |
| 搜索表示 | Elasticsearch 索引 | 哪些领域支持用户的查询? |
| 搜索展示 | 应用界面 | 用户可以识别并检查结果吗? |
这种分离是一种设计选择,而不是在声称 Elasticsearch 无法存储数据。这样做可以让在搜索文档包含已转换或组合内容时,更容易推理由恢复和模型演进带来的影响。重建所用的输入应该具有已知的模式和可追溯的血缘关系,而不是在事故发生时恰好能够访问到的任意页面。
用具体问题评估搜索质量
应根据具有代表性的任务和预期的有用结果来评估搜索质量。一次成功的查询响应只证明引擎对请求作出了回答。这并不能证明第一个结果是相关的,不能证明最近的页面已被收录,也不能证明已包含重要来源。
围绕用户实际提出的问题构建评估用例。支持工程师可能需要一个完全精确的配置名称;研究人员可能会用不同的措辞来描述某个概念。分别跟踪这些用例,以便在改进广义语言匹配能力的同时,不会掩盖在精确标识符检索方面出现的退化。
还要检查集合的排除项。缺失的文档可能是摄取问题,而不是相关性问题。在部分集合上具有出色排序的索引仍然只能提供不完整的覆盖范围。让源的可用性和集合结果与查询评估一起变得可见,这样团队才能修改管道中的正确部分。
结论
Elasticsearch 通过索引、映射和查询执行,将建模后的文档转化为可搜索内容。一个有用的文档集更早就开始于稳定的源身份和可接受的文本,并在摄取之后延续,通过可见性和质量检查来完善。在调优搜索行为之前,先定义检索单元并保留可重建的输入。这样,应用就拥有了一个可以解释且可改进的搜索层。
准备好构建一个可搜索的网络集合了吗?
在将收集到的页面发送到搜索索引之前,先定义文档标识、字段映射和内容接收规则。
今天注册即可获得 $5 免费额度 — 无需信用卡.
领取您的 $5 额度 →常见问题
问:Elasticsearch 是关系型数据库吗?
Elasticsearch 是一个分布式搜索和分析引擎,其文档索引模型不同于关系型数据库。当应用需要事务型关系和关系约束时,应单独选择系统记录库。
问:新文档会立即可搜索吗?
已索引的更改会通过 refresh 变为可搜索,因此成功写入和在搜索中可见是两个不同的里程碑。请将应用对时效性的要求与已配置的可见性行为相匹配。
问:有效的 JSON 能保证是一个好的搜索文档吗?
有效的 JSON 只是一种序列化格式,而一个有用的搜索文档还需要稳定的标识、合适的映射以及有意义的内容。一个仅包含访问声明的有效对象仍然可能是不适合索引的文档。
问:每个字段都需要进行全文分析吗?
用于精确过滤、标识符、数值计算和日期等的字段需要与这些用途相匹配的类型。应对承载语言内容、且其词项需要参与文本搜索的字段进行全文分析。