【问题标题】:multi field mapping elasticsearch多字段映射elasticsearch
【发布时间】:2016-02-05 22:42:05
【问题描述】:

我正在尝试在 elasticsearch 中映射一个多字段

  • 第一个字段 - 'in' 应包含所有索引列,
  • 第二个字段 - 'orig' 应按原样包含文本。

例如:

    "findings": {
       "type": "multi_field",
       "fields": {
          "in": {
             "type": "string"
          },
          "orig": {
             "type": "string",
             "index":"not_analyzed"
          }
       }

一旦我创建它并查询它的外观。

当 index = 'no' 是否意味着该字段永远不会被索引?

  "findings": {
                  "type": "string",
                  "index": "no",
                  "fields": {
                     "in": {
                        "type": "string"
                     },
                     "orig": {
                        "type": "string",
                        "index": "not_analyzed"
                     }
                  }

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    Multi_fields 已经从 elasticsearch 中删除了很长时间。

    相反,任何核心字段类型(不包括对象和嵌套)现在都接受字段参数,如 OP 的第二个示例所示。

    但是,当您在任何其他字段中指定 fields 时,它只是意味着将内容复制到不同的字段并应用一组不同的分析器来查询相同的内容。

    因此,当您指定 index=no 时,该字段不会被索引,因此不可搜索,但内部字段具有自己的属性。

    您也可以使用copy_to 将内容复制到其他字段并在那里指定不同的分析器,但是这两个字段之间没有“显式”关系,这在 multi_fields 中非常明确,因为新字段以@987654324 访问@或'findings.orig'

    【讨论】:

    • 谢谢..你指的是什么作为OP的第二个例子?
    • 您在第一个映射中使用了“type”:“multi_field”,而在第二个映射中使用了“type”:“string”。第二个映射被称为第二个示例
    【解决方案2】:

    "index" : "no" 对于不同的类型有不同的含义。由于您问题中的findings 字段为String,因此根据elasticsearch documentation 具有以下含义。

    no 表示它根本不可搜索(作为单个字段;它可能仍包含在 _all 中)。设置为 no 会禁用 include_in_all。

    你不能直接搜索字段findings,因为它有index: no,而你可以使用findings.infindings.orig搜索它

    你可以学习更多关于index属性here

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2017-10-13
      • 2017-05-18
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多