当前位置: 首页 > 知识库问答 >
问题:

在Elasticsearch中,我可以设置语言特定的多字段吗?

屠锦
2023-03-14

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

考虑这个映射:

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.english]的映射。[book_title]的现有映射必须是类型对象,但找到[text]." } ], "type":"mapper_parsing_exception","原因":"无法动态添加字段[book_title.english]的映射。[book_title]的现有映射必须是类型对象,但找到[文本]." }, "状态": 400}

我做错了什么?

如果我的方法行不通,还有什么更好的方法呢?

共有1个答案

尹超
2023-03-14

问题是,您正在使用字段作为外业手簿的标题。

  • Fields关键字用于以多种方式保留相同的字段和数据,即使用不同的分析器或其他一些设置更改,但字段下所有字段名称中的值应相同。下面是描述什么是关键字字段的链接https://www.elastic.co/guide/en/elasticsearch/reference/2.4/multi-fields.html

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

放置多个测试

{
  "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下添加具有不同数据的多个字段

 类似资料:
  • 问题内容: 在我的数据集中,一个文档包含20多个带有嵌套对象的字段。它们大多数是长文本字段。这些字段对于全文搜索很重要,但是我们只需要在输出中显示标题,简短描述和ID。 是否可以在ElasticSearch中为全文查询指定输出字段?(如MongoDB中的投影) 问题答案: 我认为您正在寻找搜索请求的属性: 允许有选择地为搜索命中表示的每个文档加载特定字段。默认情况下加载内部 字段。 这些字段将自动

  • 问题内容: 我用来将货币从BigDecimal格式化为字符串。按预期工作,问题在于我们的主要目标是荷兰市场,而默认的荷兰格式很奇怪。 让我解释一下,当格式化-125时,荷兰语将得到“€125-”(预期为“-€125”)。英国按预期方式提供“-£125.50”。 我可以检查语言环境是否为荷兰语,然后在每次我要设置小数格式时都提供一个模式。但是我更喜欢一个解决方案,它可以覆盖荷兰的格式设置。我在考虑以

  • 有谁对蛋糕1.3的多语言设置有很好的了解吗? 今天,我用的是一个/locale/nor/LC_MESSAGES/default。po 标题: 以及其中的常规语言字符串。 在引导中。php= 像这样简单的字符串; 翻译为ok,但是,如果我使用复数(表示时间助手) 这些都没有翻译!?! 我不知道还能做什么,因为我已经手动创建了。编辑器中的po文件(不使用控制台或其他方式提取) 我还需要包括一些其他内容

  • 之前我用的是实时DB,现在需要改用fiRecovery 当我在实时数据库中写入数据时,我使用了这种方法。 所以数据会这样显示 但是当我使用消防商店时,它将显示这一点 我能否将< code > u 93 aclsjjilqbdfck 2 ST 更改为< code > 02 nfe 2 jzidgzxzwypmcwq 20 qwq 93 ,如果可以更改,我该怎么做? 这是我的代码。

  • 问题内容: 通过使用,我们可以向Logstash添加新字段。 但是,在这里,我想知道如何为该特定领域设置分析仪。 例如:,我有一个新的id字段,其字段类似于,但Elasticsearch提供的常规分析器会将其分为和。因此,我无法将术语功能有效地应用于该特定领域并使之有用。 在这里,对于ID字段,我想应用我自己的自定义分析器,该分析器不标记值,而是应用小写过滤器。 如何在logstash中完成此操作

  • 我有一个法语单词索引。我想在索引属性上应用一个分析器。假设我有一个标题属性,我想将其视为“法国属性”。我试过这个(在基巴纳): 但它导致: 我不明白为什么我会有这个错误。如果我显示映射(