Elasticsearch中的字段和属性有什么区别?

时间:2018-10-02 09:22:34

标签: elasticsearch

我目前正在尝试了解字段(https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html)和属性(https://www.elastic.co/guide/en/elasticsearch/reference/current/properties.html)之间的区别。

它们都以某种方式定义为类型/映射属性的“子字段/子属性”,都可以具有单独的类型和分析器(据我所知),都可以通过点符号({{1} }或mappingProperty.subField)。

我有这种感觉,例如,文档随机使用“字段”和“属性”这两个术语,

  

类型映射,对象字段和嵌套字段包含子字段,   称为属性。

属性和(子)字段之间有什么区别?如何确定我是否有财产或田地?

换句话说,如何确定我是否使用

mappingProperty.property

{
  "mappings": {
    "_doc": { 
      "properties": {
        "myProperty": { 
          "properties": {

          }
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:3)

子字段是从父属性源建立索引的。而子属性需要在文档源中具有“真实”值。

如果源包含真实对象,则需要创建属性。每个属性将对应一个与您的来源不同的值。

如果只想索引相同的值但使用不同的分析器,则使用子字段。

  

通常以不同的方式为相同的字段建立索引对于   不同的目的。这是多字段的目的。例如,   字符串字段可以映射为文本字段以进行全文搜索,   并作为用于排序或聚合的关键字字段:

(对不起,我很难解释= |)

答案 1 :(得分:0)

注意:这是我目前的理解。可能不是100%准确。

property是我们用来在RDBMS(MySQL等标准关系数据库)中调用字段的工具。它存储对象的属性并提供索引的高级结构(我们可以将其与关系数据库中的表进行比较)。

链接到field概念中的property是使用特定分析器对该属性进行索引的一种方法。

所以说你有:

  • 一个分析器(A)大写
  • 一个分析器(B)小写
  • 一个分析器(C)可以翻译成西班牙语(甚至不存在,只是为了告诉您一个想法)

analyzer的作用是将输入(属性中的文本)转换为一系列将被索引的标记。当您进行搜索时,将使用相同的分析器,以便将文本转换为这些标记,然后为每个标记赋予一个分数,然后使用这些标记从索引中获取文档。

(A) Dog = DOG
(B) Dog = dog
(C) Dog = perro

要使用特定的字段配置进行搜索,请使用点号进行调用:

  • text字段使用标准分析器。
  • text.english字段使用英语分析器。

因此,这些字段基本上允许您使用不同的令牌生成模型执行搜索。