2016-11-09 6 views
0

Я очень новичок в ES. Я использую https://github.com/dariusk/corpora/blob/master/data/humans/us_presidents.json в качестве обучающего набора.ElasticSearch/поля Kibana при обновлении документа

Сначала я вошел в это Dev вкладке Инструменты в Kibana:

POST /presidents/president/1 
{ "bo" : 
     { 
     "website":"", 
     "startdate":"2009-01-20", 
     "role_type_label":"President", 
     "enddate":"2013-01-20", 
     "description":"President", 
     "district":null, 
     "phone":null, 
     "title":"President", 
     "congress_numbers":[ 
      111, 
      112, 
      113 
     ], 
     "title_long":"President", 
     "current":false, 
     "person":{ 
      "name":"President Barack Obama [D]", 
      "firstname":"Barack", 
      "twitterid":null, 
      "middlename":"", 
      "gender":"male", 
      "bioguideid":"O000167", 
      "namemod":"", 
      "birthday":"1961-08-04", 
      "link":"https://www.govtrack.us/congress/members/barack_obama/400629", 
      "youtubeid":null, 
      "sortname":"Obama, Barack (President) [D]", 
      "lastname":"Obama", 
      "gender_label":"Male", 
      "osid":"N00009638", 
      "pvsid":"9490", 
      "nickname":"", 
      "id":400629, 
      "cspanid":null 
     } 
     ... 
     } 
} 

Тогда я понял, что если я хочу добавить больше данных об отдельных президентов, я предпочел бы сделать это:

POST /presidents/president/1 
{ 
     "website":"", 
     "startdate":"2009-01-20", 
     "role_type_label":"President", 
     "enddate":"2013-01-20", 
     "description":"President", 
     "district":null, 
     "phone":null, 
     "title":"President", 
     "congress_numbers":[ 
      111, 
      112, 
      113 
     ], 
     "title_long":"President", 
     "current":false, 
     "person":{ 
      "name":"President Barack Obama [D]", 
      "firstname":"Barack", 
      "twitterid":null, 
      "middlename":"", 
      "gender":"male", 
      "bioguideid":"O000167", 
      "namemod":"", 
      "birthday":"1961-08-04", 
      "link":"https://www.govtrack.us/congress/members/barack_obama/400629", 
      "youtubeid":null, 
      "sortname":"Obama, Barack (President) [D]", 
      "lastname":"Obama", 
      "gender_label":"Male", 
      "osid":"N00009638", 
      "pvsid":"9490", 
      "nickname":"", 
      "id":400629, 
      "cspanid":null 
     } 
} 

ОК, поэтому ES одобрила обновление.

Но теперь, когда я перехожу к шаблонам управления/указателя в Кибане, я вижу как person.lastname, так и bo.person.lastname как поля.

Почему предыдущее поле осталось? Нормально ли для ES сохранять поля, которые больше не находятся в обновленном документе?

И, очевидно, кроме исключительно смешных, пожалуйста, не говорите о сегодняшних результатах выборов.

ответ

1

Это нормальное, ожидаемое поведение для поиска Elasticsearch.

ES по умолчанию будет динамически отображать данные, которые вы вставляете. Когда вы индексируете несколько объектов под одним и тем же типом в индексе, все эти объекты имеют одинаковое сопоставление. Цель состоит в том, чтобы позволить вставлять объекты, которые необязательно несут все потенциальные поля его типа, и в любом случае вставляться в индекс.

Вы можете определить отображение самостоятельно либо при создании индекса, либо путем определения нового типа индекса. Сопоставления также могут быть обновлены с некоторыми оговорками.

Чтобы увидеть отображение типа в индексе, выполните следующие действия:

GET /tk_file.2016/TK_FILE/_mapping 

Ваш ответ будет выглядеть следующим образом:

{ 
    "presidents": { 
     "mappings": { 
     "president": { 
      "properties": { 
       "bo": { 
        "properties": { 
        "congress_numbers": { 
         "type": "long" 
        }, 
        "current": { 
         "type": "boolean" 
        }, 
        "description": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "enddate": { 
         "type": "date" 
        }, 
        "person": { 
         "properties": { 
          "bioguideid": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "birthday": { 
           "type": "date" 
          }, 
          "firstname": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "gender": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "gender_label": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "id": { 
           "type": "long" 
          }, 
          "lastname": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "link": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "middlename": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "name": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "namemod": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "nickname": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "osid": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "pvsid": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          }, 
          "sortname": { 
           "type": "text", 
           "fields": { 
           "keyword": { 
            "type": "keyword", 
            "ignore_above": 256 
           } 
           } 
          } 
         } 
        }, 
        "role_type_label": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "startdate": { 
         "type": "date" 
        }, 
        "title": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "title_long": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "website": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        } 
        } 
       }, 
       "congress_numbers": { 
        "type": "long" 
       }, 
       "current": { 
        "type": "boolean" 
       }, 
       "description": { 
        "type": "text", 
        "fields": { 
        "keyword": { 
         "type": "keyword", 
         "ignore_above": 256 
        } 
        } 
       }, 
       "enddate": { 
        "type": "date" 
       }, 
       "person": { 
        "properties": { 
        "bioguideid": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "birthday": { 
         "type": "date" 
        }, 
        "firstname": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "gender": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "gender_label": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "id": { 
         "type": "long" 
        }, 
        "lastname": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "link": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "middlename": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "name": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "namemod": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "nickname": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "osid": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "pvsid": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        }, 
        "sortname": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
           "type": "keyword", 
           "ignore_above": 256 
          } 
         } 
        } 
        } 
       }, 
       "role_type_label": { 
        "type": "text", 
        "fields": { 
        "keyword": { 
         "type": "keyword", 
         "ignore_above": 256 
        } 
        } 
       }, 
       "startdate": { 
        "type": "date" 
       }, 
       "title": { 
        "type": "text", 
        "fields": { 
        "keyword": { 
         "type": "keyword", 
         "ignore_above": 256 
        } 
        } 
       }, 
       "title_long": { 
        "type": "text", 
        "fields": { 
        "keyword": { 
         "type": "keyword", 
         "ignore_above": 256 
        } 
        } 
       }, 
       "website": { 
        "type": "text", 
        "fields": { 
        "keyword": { 
         "type": "keyword", 
         "ignore_above": 256 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Обратите внимание здесь, что у вас есть множество отображений для объект bo и связанные с ним подполя, а также сопоставление для каждого поля вашего последующего документа. Это эффект динамического отображения.

Чтобы отключить эту гибкость отображения, вы можете явно отключить динамические сопоставления и сами определить структуру документа, включая его типы данных. Возможно, вы хотите, чтобы bioguideid был целым числом вместо текста, как он определен в текущем сопоставлении? Я направляю вас на Mappings API.

Смежные вопросы