工程

在 Elastic 应用搜索中隆重推出多语言引擎

无需额外配置,您可以针对具体语言直接对 Elastic 应用搜索引擎进行优化。我们针对 13 种语言推出此服务,包括:英语、西班牙语、德语、丹麦语、俄语、中文、韩语和日语。

但是这会为底层搜索方法带来哪些改变呢?这会对访客的搜索体验产生哪些裨益呢?要获享这些益处,是否需要进行额外配置呢?要获知答案,请继续阅读,您也可以参考文档并立即开始使用。

来个小练习?分析和分词

搜索离不开分析。在搜索引擎内创建索引时,会进行首次分析。在索引过程中,系统会将文档内的文本会转换为词元。然后,系统会基于索引将这些词元作为单词进行整理。

索引创建完成之后,每次进行搜索查询时都会参照此索引。系统会分析输入的文本,将其转换为词元,然后与已索引单词进行匹配。输入的查询单词与已索引单词越接近,搜索结果的相关性就越高。

如果基于 Elasticsearch 创建您自己的搜索引擎,您可能需要配置一个(或多个)自定义分析工具来应对所选语言的深层次问题。您对分析工具或分析工具集的配置方法会直接影响到词元的创建方式以及单词的构建方法。尽管在通常情况下,软件会包含一个用于创建基础索引且行之有效的语言分析工具,但若需进行更深层配置,必须对字符筛选器、分词器以及词元筛选器均进行微调。

应用搜索将这些复杂过程一扫而光,为您提供一个经优化且基于 API 的解决方案,以便您能将其纳入应用中。为了演示这一运行过程,我们可以看一下应用搜索引擎现在如何解析中文字符。

高工作资金

应用搜索引擎内的基本设置是Universal。其已经过精心配置,是大部分搜索用例的理想之选。然而,如果指定语言的话,应用搜索引擎会使用针对该语言加以优化的自定义分析工具。

例如,在Universal设置下,搜索工具会智能地查询文档内的词语组合,而非对每个单词进行单独搜索。 如果搜索 hockeystick 的话,搜索引擎不会单独搜索每个单词,而是会搜索 hockey stick

尽管这一设置在英语中(或者针对Universal单词匹配)特别实用,但是我们可以看一看如果将其用于别的语言,为何会导致歧义…

以下面这个中文词语为例:

工资 : salary

这个词语由两个汉字组成,分别为“工”和“资”。

工 : work 资 : money

如果使用 Universal 设置(不区分语言)进行分析,分词器会将词语中的这两个汉字视作两个词元,然后按照字面意思(而非语义)寻找匹配。

假想中文搜索用户搜索工资,那么他们看到的是与工作资金相关的搜索结果,而非与工资相关的结果。从这个例子您可以看出这一设置的误导性有多大!

在英语设置下搜索结果时,引擎会认为工作资金中这两个词之间的关系与 hockey stick 中这两个单词间的关系一样。然而,在中文中,将这两个词语简单叠加到一起却代表完全不同的概念。

通过应用恰当的中文分析工具,系统知道工资是一个双字符词语(单词对),然后就能针对这个单词对创建词元,在索引中为工资创建正确的单词。双字符词语:工资现在将会与工资相关联,而不是与工作资金相关联。结合在一起后,词元的意思比单独各个部分所代表的意思要丰富。

应用搜索查询

如今可在创建引擎的过程中轻松针对具体语言进行配置。

如果您正在通过应用搜索 API 创建应用搜索引擎,那么 POST 代码示例如下。下面这些内容会创建一个新的名为 panda 的中文 (zh) 引擎:

curl -X POST 'https://host-xxxxxx.api.swiftype.com/api/as/v1/engines' \
-H 'Content-Type: application/json' \
-H 'Authorization:Bearer private-xxxxxxxxxxxxxxxxxxxx' \
-d '{
  "name": "panda",
  "language": "zh"
}'

每种语言都会有语言代码。此代码遵循 IETF RFC 5646 标准(与 ISO 639-1ISO 3166-1 相同)。

如果您希望使用 GUI 创建搜索引擎,在最初创建引擎的过程中会出现语言选择工具,之后在仪表板内亦可看到语言选择工具:

Select language dropdown within Engine creation

如要查看引擎是针对何种语言进行配置的,请查看左上角引擎名称下方的代码。如果此处未显示语言,则设置类型为Universal

A Chinese language Engine named panda

既然现在已针对特定语言完成了引擎设置,还需要采取任何其他特殊步骤吗?完全没与必要!每次向引擎中添加数据索引时,系统均会针对具体语言进行高级分析。此后,通过这些语言进行搜索查询时,系统将会应用在创建索引过程中所用的、具有相关性且针对该语言加以优化的同一分析工具。

结论

即使您仅专注于一个值、数据类型和语言,搜索也会是一个无比艰巨的技术挑战。实际上,搜索远比这一过程要复杂得多:我们拥有很多值,数据类型不一,而且还需要支持大量语言。最终理想是开发出极其精确且不区分语言和数据类型的搜索引擎,而且此引擎还可通过 machine learning 来预测上下文。

然而在实现这一目标之前,如果您希望在应用中融入大量的搜索专业知识,Elastic 应用搜索将是一种行之有效的方法。您可以随时调用 14 个经过良好优化的语言引擎,从而得以重新专注于通过直观的仪表板和简单、动态且维护良好的 API 创造优质的搜索经验。您可以注册并在 14 天内免费试用,亲身体验 API 并确定 Elastic 应用搜索是否适合您。

*更新:我们目前在 Elastic 网站搜索内提供多语言支持。输入您的域名,选择语言,然后网站搜索爬虫会帮您对网页进行索引。随后,请安装程序片段并获享优质的搜索体验。