有没有办法对条件使用Elasticearch COPY_TO要素

li9yvcax  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(118)

我在应用程序中实现了Complete Suggester,下面是我的要求:

我只想在两种类型的字段上使用补全建议程序,只是我的索引是这样的(由于其他一些要求,这些字段在到来时不会被索引,而是会将数据展平以匹配此Map):

flatData": {
    "type": "nested",
    "properties": {
      "key": {
        "type": "keyword"
      },
      "type": {
        "type": "keyword"
      },
      "key_type": {
        "type": "keyword"
      },
      "value_string": {
        "type": "text",
        "fielddata": true,
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }

因此,基本上,它在以下格式下为数据编制索引:

{
        "key": "idBook",
        "type": long,
        "key_type": "idBook.long",
        "value_string": 67d25bce-39b5-4069-b137-0698286f50a4
    },
    {
        "key": "bookName",
        "type": "string",
        "key_type": "bookName.string",
        "value_string": "A Song Of Ice And Fire"
    },
    {
        "key": "numPages",
        "type": "string",
        "key_type": "numPages.string",
        "value_string": "8000"
    }

在我的例子中,我只想在键的值为BookName和AuthorName时添加补全提示符。例如,我想要做的是添加一个_ALL字段,在其中复制这些键的值,以获得如下所示:

"value_string": {
        "type": "text",
        "copy_to": "my_all"
        "fielddata": true,
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
"my_all": {
      "type": "completion"
    }

例如,有没有办法仅当键的值为bookName时才将_复制到My_All字段中?

i2byvkas

i2byvkas1#

TLDR;

不支持,copy_to不支持条件。但这并不意味着你不能实现你想做的事情。

您应该关注支持条件的ingestion pipeline

解决方案

你从这份文件开始

{
    "key": "bookName",
    "type": "string",
    "key_type": "bookName.string",
    "value_string": "A Song Of Ice And Fire"
}

创建此管道

PUT _ingest/pipeline/my-pipeline
{
  "processors": [
    {
      "set": {
        "description": "If 'url.scheme' is 'http', set 'url.insecure' to true",
        "if": "ctx.key == 'bookname'",
        "field": "my_all",
        "value": "{{{value_string}}}"
      }
    }
  ]
}

您最终得到了这份文档

{
    "key": "bookName",
    "type": "string",
    "key_type": "bookName.string",
    "value_string": "A Song Of Ice And Fire",
    "my_all": "A Song Of Ice And Fire"
}

只需相应地创建Map,将字段my_all设置为类型完成,您就应该都设置好了。

相关问题