Elastic 6.2 записывает данные в неверный индекс - PullRequest
0 голосов
/ 08 сентября 2018

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

Здесь оригинал:

"index": "bookmark",
"type": "bookmark"

... и эксперимент такой:

"index": "experiment",
"type": "experiment"

Как оказалось, все это сработало в первый раз, но затем следующий документ не сработал, а записал в индекс "закладки".

Я потратил несколько часов, изменяя имена индексов и типов, и хотя он иногда записывает в индекс «эксперимент» один или несколько раз, он затем переключается на «закладку», не возвращаясь.

В приложении есть две ссылки на индекс и тип, и обе они передаются в виде массива в класс, который обрабатывает работу Elastic.

Если удалить массив «data» для документа, который будет передан в Elastic, он не будет записывать данные, что, как я полагаю, должно быть очевидным, но тогда при нормальных обстоятельствах он игнорирует объект "meta_information", индекс и тип.

Стоит отметить, что это зрелое приложение, которое использует Elastic без ошибок с 5.6.

Такое поведение необъяснимо и, согласно коду, тоже невозможно.

С точки зрения различий между двумя отображениями, эксперимент: имеет дополнительный «вложенный» объект; и другой "тип".

Я использую Elastic 6.2.4 и Kibana той же версии.

В соответствии с запросом приведено сопоставление индекса «эксперимента»:

PUT localhost:9200/experiment

{
    "settings":{
        "analysis":{
            "char_filter":{
                "&_to_and":{
                    "type": "mapping",
                    "mappings": ["&=> and "]
                }
            },
            "filter":{
                "asset_en_stopwords":{
                    "type": "stop",
                    "stopwords": ["_english_"]
                },
                "asset_en_stemmer":{
                    "type": "stemmer",
                    "name": "english"
                },
                "asset_en_shingle":{
                    "type": "shingle",
                    "max_shingle_size": 5,
                    "min_shingle_size": 2,
                    "output_unigrams": false,
                    "output_unigrams_if_no_shingles": true
                }
            },
            "analyzer":{
                "asset_en_analyzer":{
                    "type": "custom",
                    "char_filter": ["html_strip", "&_to_and"],
                    "tokenizer": "standard",
                    "filter": ["asset_en_stopwords", "asset_en_stemmer", "lowercase", "asset_en_shingle", "asciifolding"]
                }
            }
        }
    },
    "mappings":{
        "experiment":{
            "properties":{
                "user_id":{
                    "type": "long"
                },
                "creation":{
                    "type": "date",
                    "format": "date_hour_minute_second"
                },
                "deleted":{
                    "type": "integer"
                },
                "favourite":{
                    "type": "integer"
                },
                "modification":{
                    "type": "date",
                    "format": "date_hour_minute_second"
                },
                "note":{
                    "type": "text",
                    "analyzer": "english",
                    "fields":{
                        "std":{
                            "type": "text",
                            "analyzer": "asset_en_analyzer",
                            "fields":{
                                "std":{
                                    "type": "text",
                                    "analyzer": "standard"
                                }
                            }
                        }
                    }
                },
                "title":{
                    "type": "text",
                    "analyzer": "english",
                    "fields":{
                        "std":{
                            "type": "text",
                            "analyzer": "asset_en_analyzer",
                            "fields":{
                                "std":{
                                    "type": "text",
                                    "analyzer": "standard"
                                }
                            }
                        }
                    }
                },
                "links_to_asset":{
                    "type": "nested",
                    "properties":{
                        "note_link_id":{
                            "type": "long"
                        },
                        "user_id":{
                            "type": "long"
                        },
                        "creation":{
                            "type": "date",
                            "format": "date_hour_minute_second"
                        },
                        "modification":{
                            "type": "date",
                            "format": "date_hour_minute_second"
                        },
                        "to_asset":{
                            "type": "integer"
                        },
                        "from_asset":{
                            "type": "integer"
                        },
                        "comment":{
                            "type": "text",
                            "fields":{
                                "std":{
                                    "type": "text",
                                    "analyzer": "asset_en_analyzer",
                                    "fields":{
                                        "std":{
                                            "type": "text",
                                            "analyzer": "standard"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "meta_information":{
                    "type": "nested",
                    "properties":{
                        "entities":{
                            "type": "nested",
                            "properties":{
                                "name":{
                                    "type": "text",
                                    "fields":{
                                        "std":{
                                            "type": "text",
                                            "analyzer": "asset_en_analyzer",
                                            "fields":{
                                                "std":{
                                                    "type": "text",
                                                    "analyzer": "standard"
                                                }
                                            }
                                        }
                                    }
                                },
                                "type":{  
                                    "type":"keyword"
                                },
                                "salience":{
                                    "type":"integer"
                                },
                                "metadata":{
                                    "type": "nested",
                                    "properties":{
                                        "wikipedia_url":{
                                            "type": "keyword"
                                        },
                                        "mid":{
                                            "type": "keyword"
                                        }
                                    }
                                }
                            }
                        },
                        "sentiment":{
                            "type": "nested",
                            "properties":{
                                "score":{
                                    "type":"integer"
                                },
                                "magnitude":{
                                    "type":"integer"
                                }
                            }
                        }
                    }
                },
                "url":{
                    "type": "keyword"
                },
                "publication_date":{
                    "type": "date",
                    "format": "date_hour_minute_second"
                }
            }
        }
    }
}

... где единственное различие между ним и "закладками" - это вложенный тип объекта meta_information.

Кроме того, вот код, который записывает данные:

    $data = array(
        'user_id' => $this->flexi_auth->get_user_id(),
        'title' => strip_tags( $title ),
        'note' => strip_tags( $note ),
        'creation' => str_replace( ' ', 'T', date("Y-m-d H:i:s") ),
        'modification' => str_replace( ' ', 'T', date("Y-m-d H:i:s") ),
        'publication_date' => $date,
        'url' => $url,
        'links_to_asset' => [],
        'meta_information' => [
            'entities' => $metaInformation['entities'],
            'sentiment' => $metaInformation['sentiment']
        ],
        'favourite' => 0,
        'deleted' => 0
    );

    $params = array(
        'index' => "experiment",
        'type' => "experiment",
        'id' => $note_id
    );

    $this->elasticsearch_model->addAssetData(
        $data, $params
    );

... и в модели:

public function addAssetData ($data, $params) {
    try {
        if (!isset($params['index']) || !isset($params['type']))
            die ("Unable to add Elastic index for an Asset. Either index or type is not defined.");

        $client = $this->_client;

        foreach ($data as $_id => $insert) {
            $params['body'][$_id] = $insert;
        }

        $responses = $client->index($params);

        return $responses;

    } catch (Exception $e) {
        return $e->getMessage();
    }
}

Вот где Elastic вмешивается, иногда выбирает запись данных на основе этих параметров, затем - через некоторое время и наугад - игнорирует массив meta_information и переключается на индекс: "закладки "и введите:" закладка ".

Я также использую официальный пакет Elastic PHP .

Я использовал var_dump($data, $params) бесчисленное количество раз, и значения верны, но то, решит ли Elastic использовать эти данные, находится на коленях у богов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...