Модуль Elasticsearch Kubernetes - не может подключиться к порту 9300

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

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

. Мне также нужен вариант отливки не-объектов в строки, чтобы [1,2] == = ["1", 2]

Поскольку мой проект использует UnderscoreJs, я решил сделать его mixin, а не автономной функцией.

Вы можете проверить это на http://jsfiddle.net/nemesarial/T44W4/

Вот мой mxin:

_.mixin({
  /**
  Tests for the equality of two variables
    valA: first variable
    valB: second variable
    stringifyStatics: cast non-objects to string so that "1"===1
  **/
  equal:function(valA,valB,stringifyStatics){
    stringifyStatics=!!stringifyStatics;

    //check for same type
    if(typeof(valA)!==typeof(valB)){
      if((_.isObject(valA) || _.isObject(valB))){
        return false;
      }
    }

    //test non-objects for equality
    if(!_.isObject(valA)){
      if(stringifyStatics){
        var valAs=''+valA;
        var valBs=''+valB;
        ret=(''+valA)===(''+valB);
      }else{
        ret=valA===valB;
      }
      return ret;
    }

    //test for length
    if(_.size(valA)!=_.size(valB)){
      return false;
    }

    //test for arrays first
    var isArr=_.isArray(valA);

    //test whether both are array or both object
    if(isArr!==_.isArray(valB)){
      return false;
    }

    var ret=true;
    if(isArr){
      //do test for arrays
      _.each(valA,function(val,idx,lst){
        if(!ret){return;}
        ret=ret && _.equal(val,valB[idx],stringifyStatics);
      });
    }else{
      //do test for objects
      _.each(valA,function(val,idx,lst){
        if(!ret){return;}

        //test for object member exists
        if(!_.has(valB,idx)){
          ret=false;
          return;
        }

        // test for member equality
        ret=ret && _.equal(val,valB[idx],stringifyStatics);
      });

    }
    return ret;
  }
});

Вот как вы его используете:

_.equal([1,2,3],[1,2,"3"],true)

Чтобы продемонстрировать вложенность, вы можете сделать это:

_.equal(
    ['a',{b:'b',c:[{'someId':1},2]},[1,2,3]],
    ['a',{b:'b',c:[{'someId':"1"},2]},["1",'2',3]]
,true);

0
задан aronot 2 March 2019 в 21:03
поделиться

1 ответ

Порт 9300 является двоичным протоколом (не http) и используется для связи узла. Только порт 9200 предоставил Rest Api

Из документации :

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

0
ответ дан Amityo 2 March 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: