弹性搜索中的映射字段究竟如何工作?

时间:2015-09-15 22:08:11

标签: elasticsearch

The documentation稀疏,并不完全有用。所以说我的属性有以下字段:

{
  "my_index": {
    "mappings": {
      "my_type": {
        "my_attribute": {
          "mapping": {
            "my_attribute": {
              "type": "string",
              "analyzer": "my_analyzer",
              "fields": {
                "lowercased": {
                  "type": "string"
                },
                "raw": {
                  "type": "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      }
    }
  }
}

my_analyzer小写令牌(除了其他东西)。

所以现在我想知道以下陈述是否属实:

  1. my_analyzer未应用于raw,因为not_analyzed索引没有任何分析器,顾名思义。
  2. my_attributemy_attribute.lowercased完全相同,因此拥有字段my_attribute.lowercased
  3. 是多余的

1 个答案:

答案 0 :(得分:1)

你的第一个陈述是正确的,但第二个陈述不是。 my_attributemy_attribute.lowercased可能不一样,因为前者有自定义 my_analyzer搜索和索引分析器,而my_attribute.lowercased有{{3} (因为没有指定分析器,标准的分析器开始)。

此外,您的映射不正确,它应该是这样的:

{
  "mappings": {
    "my_type": {
      "properties": {
        "my_attribute": {
          "type": "string",
          "analyzer": "my_analyzer",
          "fields": {
            "lowercased": {
              "type": "string"
            },
            "raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }
}