1

考虑以下 JSON 文件:

{
  "titleSony": "Matrix",
  "cast": [
    {
      "firstName": "Keanu",
      "lastName": "Reeves"
    }
  ]
}

现在,我知道在 ElasticSearch 中,您可以将同义词标记过滤器应用于以下链接中给出的字段值:Elasticsearch 分析:同义词标记过滤器

因此,我可以创建一个“synonym.txt”文件Matrix => Matx,然后如果我搜索titleSony:Matx,它也会返回文档Matrix

现在,我想要为字段 name 创建一个同义词titleSony。例如 - titleSony => titleAll,这样当我搜索 时titleAll,我也应该得到所有文档titleSony

有没有办法在 ElasticSearch 中实现这一点?

4

1 回答 1

1

现在,我想要为字段名称“titleSony”创建一个同义词。例如 - titleSony => titleAll ,因此当我搜索“titleAll”时,我也应该得到所有带有“titleSony”的文档。

是的,有点。Elasticsearch 有一些与此非常相似的默认行为,我稍后会谈到。

您正在寻找的功能称为“复制到字段”。它允许您指定应将一个字段中的术语复制到另一个字段中。这对于将您希望匹配的术语合并到单个字段中很有用,当您希望匹配多个字段中的任何一个时,有助于简化您的查询。

在此示例中,您将在映射中指定应将字段中的术语titleSony复制到titleAll字段中。大概您还有其他字段(例如,titleDisney)也可以复制到该字段中。因此,搜索titleAll将有效地匹配其术语被复制到其中的其他字段。

您的映射的摘录可能如下所示:

{
  "movies" : {
    "properties" : {
      "titleSony" :   { "type" : "string", "copy_to" : "titleAll" },
      "titleDisney" : { "type" : "string", "copy_to" : "titleAll" },
      "titleAll" :    { "type" : "string" },
      "cast" : { ... },
      ...
    }
}

我之前提到过 Elasticsearch 会做这样的事情。默认情况下,它会创建一个名为的特殊字段_all,将所有文档的术语复制到该字段中。此字段允许您构建非常简单的查询来匹配文档中任何字段中出现的术语。如您所见,这是 Elasticsearch 中相当普遍的约定。(Elasticsearch 映射:_all 字段。)

于 2015-01-20T15:55:00.287 回答