Enterprise:创建 meta 引擎来扩展你的 App search 体验

在之前的文章 “Elastic App Search 入门”,我详细地介绍了 Elastic Enterprise Search 里的 App Search。如果你对 Elastic App Search 还不太了解的话,那么请先阅读那篇文章。在这里我假设你已经熟悉了那里的介绍的内容。

在今天的文章中,我将介绍如何使用 App Search 所提供的 meta engine 来进一步扩展我们的搜索体验。

 

什么是 meta engine ?

Elastic 从 7.6 发布引入了适用于 Elastic Cloud 及自我管理版本上的 Elastic App Search的 元引擎 (meta engine),并很高兴看到对新功能的响应。 如果你错过了7.6公告,请查看我们对整个企业搜索解决方案所做的增强

元引擎提供了跨多个现有或新引擎进行搜索的能力。 考虑在页面上添加一个新的搜索框,然后关闭该页面并在你选择的子引擎中搜索文档。 这使大型公司(或实际上任何规模的公司)可以统一并扩展其搜索功能,同时仍然允许搜索/网站管理员完全控制每个子引擎的行为。

创建 Elatic App Search 元引擎

 

用例:

对于公司 Acme Inc. 来说,它有许多的部门,而且每个部门都有自己的网站,比如 Blog, Support, Docs,Products 及 Commerce。每个都有自己的  App Search Engine。 我们可以在这些引擎之上创建一个 meta engine 来让我们更方便地 Tunning, Boosting 及 Analytics 整个的搜索体验:

在使用 meta engine 时,我们必须注意的是:

  • Schema: 不同 engine 的 schema 匹配是非常重要的。比如一个 engine 含有 title 字段,那么它希望其它的 engine 含有同样的字段,并它们的数据类型是一样的
  • Autonomy:任何在 source engine 的变化都将反应到 meta engine。这些变化包括字段的变化,字段类型的变化等
  • Read-only files:如果想要做任何的编辑,只能在 source engine 中去做,不可以在 meta engine 中去修改。meta engine 不拥有任何的文档
  • Permissions:只有具有管理权限,或具有所有权访问权才可以创建 meta engine
  • Read rights: meta engine 用户将拥有对 source engine 的读权限

安装

在 Elastic 7.7 中,App search 的安装稍有不同。在今天的文章中,我来介绍一下该如何安装。在这里,我将以 Elastic 7.7 的发行版来进行描述。

Elasticsearch

我们可参考我之前的文章“如何在Linux,MacOS及Windows上进行安装Elasticsearch”来安装我们的Elasticsearch。在最新版本的发布中,我们需要启动安全机制才可以。为此,我们需要修个 config/elasticsearch.yml 文件。我们添加如下的配置:

xpack.security.enabled: true

在这里,我们启动 Elasticsearch 的安全。我们启动 Elasticsearch。并在另外一个 console 中打入如下的命令:

./bin/elasticsearch-setup-passwords auto

通过上面的命令,它将为我们生成所需要的密码信息:

Changed password for user apm_system
PASSWORD apm_system = 8E1m7pJwJQ9uHCSfONXk

Changed password for user kibana
PASSWORD kibana = RVDFQDWSHNbPsjZ3qczu

Changed password for user logstash_system
PASSWORD logstash_system = Jrl6FdjF1uzziGNeufng

Changed password for user beats_system
PASSWORD beats_system = EfG4NDFmiASlIxLR00Sa

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = f4HTlKs5rrVvQwTITJin

Changed password for user elastic
PASSWORD elastic = 2P4WzhKTlB5IcL6qIukV

我们记下上面命令所生产的密码供以后进行使用。

我们可以更进一步参阅文章 “Elasticsearch:设置Elastic账户安全” 以了解更多。

Kibana

我们可以参考我之前的文章“如何在Linux,MacOS及Windows上安装Elastic栈中的Kibana”来进行我们的安装。由于我们刚才已经在 Elasticsearch 中启动了安全机制,所以,我们必须修改 config/kibana.yml 文件:

elasticsearch.username: "kibana"
elasticsearch.password: "RVDFQDWSHNbPsjZ3qczu"

请注意,在上面的 password。它来自于我们在上面 Elasticsearch 中所生产的密码。我们启动 Kibana。如果我们配置成功的话,那么,我们将看到:

我们把之前的 elastic 用户的密码输入进去,这样我们就可以进入到 Kibana 的界面了:

为了能够实现 meta engine 的功能,我们必须使用Start a 30-day trial授权:

Enterprise App Search

我们接下来安装 App Search。我们可以地址 https://www.elastic.co/downloads/enterprise-search 来下载 App Search。在上面有详细的安装指令。根据不同的平台下载相应的安装文件。我们通过解压把 App Search 的安装文件放入到一个目录中。针对 Mac OS:

tar xzf enterprise-search-7.7.0.tar.gz
cd enterprise-search-7.7.0

我们必须修改 config/enterprise-search.yml 配置文件。按照 https://www.elastic.co/downloads/enterprise-search 上的要求,我们作如下的配置:

ent_search.auth.source: standard
elasticsearch.username: elastic
elasticsearch.password: 2P4WzhKTlB5IcL6qIukV
allow_es_settings_modification: true
secret_management.encryption_keys: [4a2cd3f81d39bf28738c10db0ca782095ffac07279561809eecc722e0c20eb09]

请注意上面的 password。它来自于上面 Elasticsearch 中的密码生成部分。接着我们按照如下的方式来运行:

./bin/enterprise-search

在我们第一次运行时,我们可以看到如下的画面:

它告诉我们用户名及密码。这个是用来登录 App Search 用的。再接着,我们可以看到如下的画面:

在这里,我们可以看到 App Search 已经被成功地启动起来了。我们还看到它提示我们添加 secret_session_key 到 config/enterprise-search.yml 文件中。这样可以保持在重启 App Search 时的会话。我们修改 config/enterprise-search.yml,并重新启动 App Search。

在浏览器的地址栏中输入 http://localhost:3002 :

点击上面的 Continue to Login:

输入上面保存的用户名及密码,并点击 Log In:

这样我们就进入到 App Search 中了。

导入数据

在今天的测试中,我们将使用如下的数据:

git clone https://github.com/liu-xiao-guo/elastic-meta-engine-datasets

在上面的 repository 里有两个 json 文件:eastern-national-parks.json 及 western-national-parks.json。其中的一个文档的内容如下:

    "description": "Covering most of Mount Desert Island and other coastal islands, Acadia features the tallest mountain on the Atlantic coast of the United States, granite peaks, ocean shoreline, woodlands, and lakes. There are freshwater, estuary, forest, and intertidal habitats.",
    "nps_link": "https://www.nps.gov/acad/index.htm",
    "states": ["Maine"],
    "title": "Acadia",
    "id": "park_acadia",
    "visitors": 3303393,
    "world_heritage_site": false,
    "location": "44.35,-68.21",
    "acres": 49057.36,
    "square_km": 198.5,
    "date_established": "1919-02-26T06:00:00Z"

这两个文档显示的是美国东部及西部的国家公园的一些信息。从数据的结果上, 这两个 JSON 文件的字段是一样的。

我点击上面的 Launch App Search 按钮:

我们首先创建 east-parks engine。输入 east-parks,并点击 Continue:

我们 点击  Upload a JSON file:

我们选择 east-national-parks.json 文件,并点击 Continue:

点击 Close 按钮:

这样我们就创建了我们第一个 east-parks engine,也就是我们之前所说的 source engine。

接下来我们使用同样的方法来创建一个叫做 west-parks 的 engine:

 

这样我们就创建两个 source engine:west-parks 及 east-parks。
在默认的情况下,所有被导入的数据的类型都是 text。我们可以点击上面的 manage,并对这两个 engine 进行相应的修改:

针对上面的数据类型,我做了如下的调整:

等我们调整完后,我们需要点击 Update Types 来完成更改。我们可以多两个 engine 都做同样的事情。

针对这两个 engine 的搜索,你可以参考我之前的文章 “Elastic App Search 入门”。在今天的文章中,我将着重来讲述如果创建 meta engine 来对这两个 engine 进行搜索。

 

创建 meta engine

打开 App Search:

点击 Meta Engines:

我们把 west-parks 及 east-parks 都选上,并点击  Create Meta Engine:

从上面,我们可以看出来,有总共11个文档,刚好是 east-parks (4) 及 west-parks (7) 两个引擎文档的总和。那么现在我们可以针对这个 meta engine 来做像我们在之前的文章 “Elastic App Search 入门”中介绍的那样来进行搜索。只不过,这次,我们是在 meta engine 里对两个 engine 同时进行搜索。我们搜索 florida

我们搜索 utah:

我们首先来搜索一下 birds 这个关键词:

上面显示没有任何的文档含有 birds。

我们来创建一个同义词:

 

点击 Create a Synonym Set:

在上面,我们把 birds, falcon, eagle 及 bats 都设置为同义词。这样当我们搜索 birds 的时候,所有含有 birds, falcon, eagle 及 bats 中的任何一个词的文档都将被搜索到。点击 Save:

点击 Create  a Synomym Set 按钮。这样就创建了一个同义词组。下面我们来接着试一下刚才的同义词:

我们可以看到在上面同时显示的有 west-parks 及 east-parks 的文档。

关于其它的 App Search 的功能请参照之前的文章 “Elastic App Search 入门”。