【问题标题】:In Elasticsearch, can I set language-specific multi-fields?在 Elasticsearch 中,我可以设置特定语言的多字段吗?
【发布时间】:2018-01-30 16:58:23
【问题描述】:

是否可以使用多字段来设置和查询多语言字段?

考虑这个映射:

PUT multi_test
{
  "mappings": {
    "data": {
      "_field_names": {
        "enabled": false
      },
      "properties": {
        "book_title": {
          "type": "text",
          "fields": {
            "english": {
              "type": "text",
              "analyzer": "english"
            },
            "german": {
              "type": "text",
              "analyzer": "german"
            },
            "italian": {
              "type": "text",
              "analyzer": "italian"
            }
          }
        }
      }
    }
  }
}

我尝试了以下方法,但它不起作用:

PUT multi_test/data/1
{
  "book_title.english": "It's good",
  "book_title.german": "Das gut"
}

错误似乎表明我正在尝试添加新字段:

{“错误”:{“root_cause”:[{“类型”:“mapper_parsing_exception”, “原因”:“无法为字段动态添加映射 [书名.英文]。 [book_title] 的现有映射必须是 键入对象但找到 [文本]。" } ], "type": "mapper_parsing_exception", "reason": "不能动态添加 字段 [book_title.english] 的映射。现有的映射 [book_title] 必须是 object 类型,但找到了 [text]。" }, "status": 400 }

我在这里做错了什么?

如果我的方法行不通,有什么更好的方法来做到这一点?

【问题讨论】:

    标签: elasticsearch multilingual full-text-indexing


    【解决方案1】:

    问题是您正在使用 field book_title 的字段。

    • 当您想以多种方式保留相同的字段和数据时使用字段关键字,即使用不同的分析器或其他一些设置更改,但字段下所有字段名称的值应该相同。这里是描述什么是关键字字段的链接@ 987654321@

    在您的用例中,映射应如下所示

    PUT 多测试

    {
      "mappings": {
        "data": {
          "_field_names": {
            "enabled": false
          },
          "properties": {
            "book_title": {
              "properties": {
                "english": {
                  "type": "text",
                  "analyzer": "english"
                },
                "german": {
                  "type": "text",
                  "analyzer": "german"
                },
                "italian": {
                  "type": "text",
                  "analyzer": "italian"
                }
              }
            }
          }
        }
      }
    }
    

    这会将 book_title 定义为对象类型,您可以在 book_title 下添加具有不同数据的多个字段

    【讨论】:

    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多