首页 » 新闻 » 如何提升 Bitrix 搜索率

如何提升 Bitrix 搜索率

自 14.0.0 版本起。 1C-Bitrix产品支持Sphinx全文搜索系统。它可以让您更快更好地搜索,减少服务器的负载,并且与搜索模块的组件完全集成。不幸的是,Bitrix 内核仍然支持当前版本 3.x.x。

Sphinx的优点:

  • 高可扩展性、索引和搜索速度;
  • 存在三个内置形态插件(ru、en、cs)和 12 个插件形态插件,用于词形还原(将单词转换为词典形式)和词干提取(找出给定源词的词干);
  • 全文、分面、地理搜索和索引;
  • 支持停用词,以防您需 台湾 区号 手机号码 要从搜索结果中删除一些词;
  • 跨集群中的多个节点(运行 Sphinx 实例)进行分布式搜索;
  • 适用于各种平台和框架的现成集成;
  • 适度使用服务器内存。

缺点:

  • 有限的 API 且没有默认的模糊搜索;
  • 需要手动配置索引结构,这使得扩展变得复杂;
  • 随着数据量的增加,性能下降;
  • 无法进行可视化;
  • 小社区。

快速索引使 Sphinx 成为对搜索功能要求较低的项目的理想选择。但是如果项目发展壮大,您想要扩大规模,或者您需要灵活地管理搜索结果,该怎么办?

将搜索迁移到 Elasticsearch

通常,当网站的当前搜索 瑞典商业名录 引擎由于某种原因不能令人满意时,它就会出现。与其他开发人员产品(所谓的 Elastic Stack,ELK)结合使用时,该工具在管理数据搜索和呈现方面提供了更多机会。

Elasticsearch (ES) 是一个非关系型文 如果上述所有步骤都无法提高速度 档存储,它有自己的 REST API,可以处理 JSON 数据。

 

Elasticsearch 在DB-Engines排名中一直处于领先地位。

Elasticsearch 和 Sphinx 之间存在许多差异。以下是最重要的几点。

  • 可扩展性。与 Sphinx 一样,ES 提供了高度的水平可扩展性,允许数据在多个节点和分片之间分布和复制。但是 Sphinx 需要手动管理索引结构,而 Elasticsearch 允许您动态向现有系统添加新节点并自动在它们之间分配负载。
  • API 功能。 ES支持各种复杂的查询以及强大的聚合和过滤功能来进行数据分析,并且可以直接从搜索引擎返回数据。 Sphinx 的 API 较差,这迫使它不断地用请求骚扰其数据库。
  • 数据结构。 ES 在多语言系统和非结构化数据上运行得更好,而 Sphinx 可以更快地索引结构化数据库:论坛、在线商店、聊天、目录。对于多语言系统,以Sphinx为例,需要为不同的语言建立单独的索引,分别配置形态学、词干提取和模糊搜索参数。相反,Elasticsearch 会将数据进行分析并上传到单独的索引中,并针对所需的语言配置参数。数据将被隔离,搜索将更快。高效处理非结构化数据使得 ES 能够成功应用于推荐系统。
  • 容错。 Sphinx 不支持自动复制和分片管理,这使得它与 Elasticsearch 相比对故障的恢复能力较差,并增加了系统管理员的工作量。
  • 日志存储及分析、数据可视化。今天这几乎是任何一个互联网项目的必备条件,但只有ELK生态能够把数据以方便分析的形式呈现出来。它可以处理来自负载平衡器、虚拟机管理程序和交换机的千兆字节数据,并以方便的仪表板形式呈现。此外,Elasticsearch 还使用机器学习 (ML) 功能来改进数据分析和搜索。

Elasticsearch 用于搜索

Elasticsearch 使用索引来组织和存储数据。索引是一种将同一类型的文档组织在一起的逻辑存储。每个索引由一个或多个分片(部分)组成,这使得数据可以分布在不同的集群节点上,以确保容错能力和可扩展性。

为了将数据纳入 ES 索引,不能简单地将数据“按原样”从站点数据库中取出并拉出。该“原始”数据需要被索引。要创建索引,请使用系统自己的 API,必须从某处调用该 API。这可以通过 Bitrix 中的事件处理程序或定期更新数据的代理或队列服务器来完成。从 ELK 堆栈中使用 Kibana 非常方便。

下面是具有手动字段映射的索引的示例。可以使用 REST API 或现成的库来创建索引。映射可以是动态的,但是通常这个东西不能完全信任。通过动态和显式映射的组合可以获得最佳结果;您可以创建自己的匹配字段的巧妙规则。