我目前正在尝试了解字段(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": {
}
}
}
}
}
}
答案 0 :(得分:3)
子字段是从父属性源建立索引的。而子属性需要在文档源中具有“真实”值。
如果源包含真实对象,则需要创建属性。每个属性将对应一个与您的来源不同的值。
如果只想索引相同的值但使用不同的分析器,则使用子字段。
通常以不同的方式为相同的字段建立索引对于 不同的目的。这是多字段的目的。例如, 字符串字段可以映射为文本字段以进行全文搜索, 并作为用于排序或聚合的关键字字段:
(对不起,我很难解释= |)
答案 1 :(得分:0)
注意:这是我目前的理解。可能不是100%准确。
property
是我们用来在RDBMS(MySQL等标准关系数据库)中调用字段的工具。它存储对象的属性并提供索引的高级结构(我们可以将其与关系数据库中的表进行比较)。
链接到field
概念中的property
是使用特定分析器对该属性进行索引的一种方法。
所以说你有:
analyzer
的作用是将输入(属性中的文本)转换为一系列将被索引的标记。当您进行搜索时,将使用相同的分析器,以便将文本转换为这些标记,然后为每个标记赋予一个分数,然后使用这些标记从索引中获取文档。
(A) Dog = DOG
(B) Dog = dog
(C) Dog = perro
要使用特定的字段配置进行搜索,请使用点号进行调用:
text
字段使用标准分析器。text.english
字段使用英语分析器。因此,这些字段基本上允许您使用不同的令牌生成模型执行搜索。