我一直在阅读这两个关于属性和字段的文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/properties.html
我理解特定文档中描述的每个目的(意思是我理解属性是什么,我理解多字段的目的),但我并没有真正看到他们实际做的事情之间的区别...例如,从显示如何定义多字段的字段doc中获取的代码段:
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"city": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
如果我用“属性”切换单词“fields”,它不会完全相同吗?
2 回答
如果您只是在示例中将
fields
替换为properties
,那么,作为Biplab said,Elasticsearch会给您一个例外:那么属性是什么?
properties
基本上声明你将在这里发送一个复杂的JSON对象 .使用
properties
而不是示例中的fields
的最接近映射如下所示:您必须插入的文档将如下所示:
请注意
"New York"
重复两次 .您可以在此处使用match发出全文查询:
或使用term query进行精确搜索:
请注意,我们正在查询不同的字段 .
它和田地有什么不同?
使用
fields
的示例,当您发布它时,我们可以发送如下所示的文档:您可以看到没有明确的数据重复 . 但事实上,Elasticsearch正在为你做这个重复 .
现在我们可以使用
city
字段进行全文搜索:但它不适用于精确搜索 . 以下查询将不返回任何内容,因为字段
city
是标记化和小写的,而term
查询的参数不是:这个确切的搜索查询将工作:
因为在映射中使用
fields
,我们刚刚要求Elasticsearch将city
字段作为keyword再次索引,并且要使用此字段,我们必须键入city.keyword
.因此,作为结论,
fields
只是告诉Elasticsearch您希望它以几种不同方式处理相同数据字段的方法 . 例如,在为不同语言的文本编制索引时,它可能会派上用场 .希望有所帮助!
根据Elasticsearch“字段”文档:
考虑到上述语句和您的JSON,如果您想使用“city”作为文本以及“keyword”,则需要在“fields”下声明其他类型,以便您可以查询