【问题标题】:Dynamically get multiple entries in a field without changing the mapping in ElasticSearch?动态获取字段中的多个条目而不更改 ElasticSearch 中的映射?
【发布时间】:2017-10-06 06:38:03
【问题描述】:

我有一个如下所示的 JSON 文件:

{'name':'John Doe',
 'work':[{
 'company':'Google',
 'duration':'2 years',
 'desc':'some long text'},
 {
 'company':'Yahoo',
 'duration':'3 years',
 'desc':'some long text'}]}

工作中可能有许多条目,从 0 到未知。 如何定义 elasticsearch 映射以使其自动存储。

我尝试过这样的事情:

from elasticsearch import elasticsearch
mapping:{    
 "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
},
"man":{
   "properties": {
       "name":{"type":"text"},
       "work":{
           "properties": {
               "company" : {"type":"text"},
               "duration": {"type":"text"},
               "desc": {"type":"text"}
               }
            }
        }
   }
}

es = Elasticsearch()

 if es.indices.exists("test"):
    es.indices.delete(index="test")

 es.indices.create("test")
 es.indices.put_mapping(index="test", doc_type="man", body=mapping)

请帮助我。谢谢。

【问题讨论】:

  • 您的映射看起来不错。你试过了吗?发生了什么?
  • 您能否提供更多有关问题所在的信息?您是否正在尝试创建嵌套对象? Elastic 会自动创建映射,如果您不使用特殊的分析器或字段,您不需要显式创建它们吗?
  • @FilipCordas- 是的,我正在尝试创建一个嵌套对象
  • @Val - 我试过了,它最终操纵了映射
  • @Val - 我想知道“man”是否有多个值,在其中,可以有多个公司。我该怎么做?

标签: python python-2.7 python-3.x elasticsearch elasticsearch-5


【解决方案1】:

在弹性搜索中,每个字段都可以是多值的。因此,您不必专门做任何事情来保存值列表。它将自动与其他字段合并。
您应该考虑的唯一一件事是对象数组在索引时被展平。因此,您将失去任何相关性。对于对象中的所有字段,您的数据将被索引为 work.company=["google","yahoo"]。所以你不能查询在谷歌工作了一段时间的人。如果您有该用例,那么您应该使用嵌套对象。只需将类型嵌套在映射中即可。无需指定数组类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2021-10-19
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多