多场映射弹性搜索

时间:2016-02-05 22:42:05

标签: elasticsearch

我试图在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"
                     }
                  }

2 个答案:

答案 0 :(得分:2)

已经从elasticsearch中删除了多个字段。

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

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

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

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

答案 1 :(得分:0)

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

  

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

您无法直接搜索字段findings,因为它已index: no,而您可以使用findings.infindings.orig

进行搜索

您可以详细了解index属性here